1
是下面的例子可能與阿波羅的客戶端?阿波羅客戶遞歸突變
舉一個例子一個簡單的待辦事項應用程序和壞的互聯網連接:
- 沒有互聯網連接
- (1突變)創建一個新的todo
- (1突變=>樂觀更新)秀新待辦事項(本地TMP-ID)
- (2突變)檢查新待辦事項爲已完成(與TMP-ID)
- (2.突變=>樂觀更新)顯示待辦事項爲已完成
- 現在連接到服務器
- ???
Apollo客戶端可以替換正確的待辦事項的tmp-ID或我該如何手動執行?
是下面的例子可能與阿波羅的客戶端?阿波羅客戶遞歸突變
舉一個例子一個簡單的待辦事項應用程序和壞的互聯網連接:
Apollo客戶端可以替換正確的待辦事項的tmp-ID或我該如何手動執行?
你可以試試這個,但我不認爲你可以保留你的服務器上的真正完成的狀態,因爲你發送completeTodo突變與臨時ID。現在有辦法爲你的服務器知道哪些待辦事項您引用。雖然這可能會給你兩個樂觀的更新,如你所願。
const CREATE_TODO_MUTATION = gql`
mutation createTodo($todoContent: String!) {
createTodo(todoContent: $todoContent) {
id
createdAt
content
completed
}
}
`;
const COMPLETE_TODO_MUTATION = gql`
mutation completeTodo($id: String!) {
completeTodo(id: $id) {
id
createdAt
content
completed
}
}
`;
const TodosPageWithMutations = compose(
graphql(CREATE_TODO_MUTATION, {
props: ({ ownProps, mutate }) => ({
createTodo: content => mutate({
variables: { todoContent: content },
optimisticResponse: {
__typename: 'Mutation',
createTodo: {
__typename: 'Todo',
id: createTempID(),
content,
completed: false,
createdAt: new Date()
}
}
}),
}),
}),
graphql(COMPLETE_TODO_MUTATION, {
props: ({ ownProps, mutate }) => ({
completeTodo: todo => mutate({
variables: { id: todo.id },
optimisticResponse: {
__typename: 'Mutation',
completeTodo: {
__typename: 'Todo',
id: todo.id,
content: todo.content,
completed: true,
createdAt: todo.createdAt
}
}
}),
}),
})
)(TodosPage);