GraphQL:Apollo 客户端缓存如何工作以保持与服务器的数据一致性?
Posted
技术标签:
【中文标题】GraphQL:Apollo 客户端缓存如何工作以保持与服务器的数据一致性?【英文标题】:GraphQL: how does Apollo client caching work to keep data consistency with the server? 【发布时间】:2020-09-10 03:36:15 【问题描述】:我正在使用 apollo-client
和 apollo-cache-inmemory
。
假设我有 2 个页面:Item List 页面和 Item Detail 页面。
项目列表页面显示(通过使用client.query(...)
获取数据:
当导航到项目 B 的 项目详细信息 页面时,我使用涉及store.readQuery
和 store.writeQuery
的变异技术对项目 B 进行了变异:https://www.apollographql.com/docs/react/caching/cache-interaction/#updating-after-a-mutation
现在,在导航回 Item List 页面之前,假设我的应用的另一个用户对 Item A 进行了突变。
我的问题:
当我导航回项目列表页面时,我是从缓存中获取数据还是从服务器获取数据? client.query(...)
是否总是从服务器获取数据? ????
如果我从缓存中获取数据,如何保持与服务器的数据一致性? (目标是始终在列表中显示更新的项目,例如项目 A - 在优化缓存的同时与服务器同步)
【问题讨论】:
【参考方案1】:如果您想保持数据同步,即使它被其他用户更改,您需要始终从服务器获取或在服务器和客户端上实现订阅。这样,您就可以在数据更改时推送新事件,并让客户端订阅这些更改以实时更新缓存。
【讨论】:
啊,对了,现在越来越清楚了。但是client.query
调用是否总是默认从服务器获取数据?
可以使用fetchPolicy 选项在每个查询的基础上修改客户端的行为。 cache-first
是默认值。
非常感谢。我现在明白了。 ??以上是关于GraphQL:Apollo 客户端缓存如何工作以保持与服务器的数据一致性?的主要内容,如果未能解决你的问题,请参考以下文章
Apollo GraphQL 客户端不会在查询中返回缓存的嵌套类型
如何在突变之前更新 apollo 缓存状态,以进行 Like、Upvote 等操作? [关闭]