更新Apollo缓存后如何保持React组件状态和Apollo同步

Ale*_*num 5 reactjs graphql react-apollo apollo-client

我有一个带有表单数据的组件。A Query用于获取数据。有一个Mutation变异数据。更改后的输入值使用来存储在React组件中setState

现在的问题是,我在Apollo中有一些状态,在React组件中有一些状态,而Togheter它们代表我的状态。我需要使它们同步-也就是说,应将它们更改为原子操作,并仅触发一个渲染。

我得到的印象apollo-link-state是客户端状态的答案,我尝试使用它来重新实现表单。虽然解决了这个特定问题,但它是一个更为冗长的解决方案,性能却差很多,因此我出于这些原因决定重新使用setState

我现在正在做的一个肮脏的技巧是写入Apollo缓存,然后更新React组件状态。尽管它对于该组件及其当前使用方式似乎有效,但它可能导致争用条件,并且在两个更新之前,状态都是无效的(假定它们按照预期的顺序完成执行)。现在,我的Mutation.update方法以以下内容结束:

cache.writeQuery({
    query: GET_TODOS,
    data: nextState
});

setTimeout(() => {
    this.setState({
        changedTodos: {},
    });
}, 500);
Run Code Online (Sandbox Code Playgroud)

这是不理想的。非常感谢您找到解决此问题的方法的帮助。