2017-04-11 61 views
1

是下面的例子可能與阿波羅的客戶端?阿波羅客戶遞歸突變

舉一個例子一個簡單的待辦事項應用程序和壞的互聯網連接:

  1. 沒有互聯網連接
  2. (1突變)創建一個新的todo
  3. (1突變=>樂觀更新)秀新待辦事項(本地TMP-ID)
  4. (2突變)檢查新待辦事項爲已完成(與TMP-ID)
  5. (2.突變=>樂觀更新)顯示待辦事項爲已完成
  6. 現在連接到服務器
  7. ???

Apollo客戶端可以替換正確的待辦事項的tmp-ID或我該如何手動執行?

回答

0

你可以試試這個,但我不認爲你可以保留你的服務器上的真正完成的狀態,因爲你發送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); 
相關問題