2017-04-11 17 views
1

次の例はapollo-clientで可能ですか?例えばApolloクライアントの再帰的な突然変異

簡単なToDoのアプリケーションと悪いインターネット接続:

  1. インターネットに接続
  2. (1突然変異)は、新たなTODO
  3. (1変異=>楽観更新)ショーを作成していません新しいTODO(ローカルTMP-ID)
  4. 完成
  5. として完成として(2.変異)(TMP-IDで)新しいTODOをチェック
  6. (2変異=>楽観更新)ショーのTODO
  7. がサーバーに接続されました
  8. ???

アポロのクライアントは正しいtodoのためにtmp-IDを置き換えることができますか、どうすれば手動で行うことができますか?

答えて

0

これを試すことができますが、一時的なIDを持つ完全な突然変異を送信しているため、サーバー上で完了ステータスがtrueであるとは思えません。あなたの参照先のTo Doを知る方法がサーバー上にあります。これはあなたが望むように2つの楽観的な更新を与えるかもしれませんが。

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); 
関連する問題