我应该直接使用 Apollo 数据还是在 Redux 存储中保存/修改它?

Posted

技术标签:

【中文标题】我应该直接使用 Apollo 数据还是在 Redux 存储中保存/修改它?【英文标题】:Should I work directly with Apollo data or save/modify it in Redux store? 【发布时间】:2018-05-24 21:53:37 【问题描述】:

我应该如何处理从 Apollo 查询中检索到的数据?

我的第一个想法是将它保存在 redux 存储中,修改它(使用 redux 减少它,使用 action creators),然后,当数据准备好时(用户点击“保存”按钮),向 Apollo 发送一个突变以在服务器上更新它。

不过,我认为这不是最好的方法。我应该避免在这里使用 Redux 存储并直接使用 Apollo 命令式 API 吗?

【问题讨论】:

【参考方案1】:

您是否阅读过有关 updating the cache 的文档?

当发送一个修改来编辑任何东西时,通常你会得到修改后的对象作为响应。当接收到更新的对象时,react-apollo 会自动更新对应的本地存储对象,该对象对应于接收到的相同 id__typename

因此,如果您在组件上使用 graphql 装饰器从 Apollo 存储中注入道具,当存储因突变或查询而更新时,道具应该会自动再次传递。无需手动修改。

在某些情况下您需要使用store.readyQuerystore.writeQuery,但它们是边缘情况,希望不会太多。

不过,我想说,除非您感到舒适并有时间与 react-apollo 合作以了解它的工作原理和作用,否则最好直接与 Apollo 合作,而不是尝试做其他事情。

【讨论】:

我已经删除了所有使用 Apollo 数据的 Redux 东西,现在我直接使用它。在运行突变或受影响项目列表未更新后,我必须执行 refetchQueries 几次。所以现在,我只是使用 Redux 处理不是来自 Apollo 的数据。 就是这样!此外,您可以使用突变中的update 选项在本地更新您的商店,而不是重新获取查询(对于从列表中添加或删除项目等情况,如上所述不会自动获取)。 (update 的文档:apollographql.com/docs/react/features/…)

以上是关于我应该直接使用 Apollo 数据还是在 Redux 存储中保存/修改它?的主要内容,如果未能解决你的问题,请参考以下文章

如何管理 react + apollo 应用程序的状态

Redux-Form 与 A​​pollo

apollo graphql 突变应该返回哪个值?

我应该如何使用 Apollo Client 和 Link Rest 从 GraphQL 中的同一响应中查询和匹配数据?

Apollo Server 和 MySQL:如何直接从数据库中获取数据?

如何使用 apollo graphql 处理授权标头?