【问题标题】:GraphQL: how does Apollo client caching work to keep data consistency with the server?GraphQL:Apollo 客户端缓存如何工作以保持与服务器的数据一致性?
【发布时间】:2020-09-10 03:36:15
【问题描述】:

我正在使用 apollo-clientapollo-cache-inmemory

假设我有 2 个页面:Item List 页面和 Item Detail 页面。

项目列表页面显示(通过使用client.query(...)获取数据:

  • 项目 A
  • B 项
  • C 项

当导航到项目 B 的 项目详细信息 页面时,我使用涉及store.readQuerystore.writeQuery 的变异技术对项目 B 进行了变异:https://www.apollographql.com/docs/react/caching/cache-interaction/#updating-after-a-mutation

现在,在导航回 Item List 页面之前,假设我的应用的另一个用户对 Item A 进行了突变。

我的问题:

  1. 当我导航回项目列表页面时,我是从缓存中获取数据还是从服务器获取数据client.query(...) 是否总是从服务器获取数据? ????

  2. 如果我从缓存中获取数据,如何保持与服务器的数据一致性? (目标是始终在列表中显示更新的项目,例如项目 A - 在优化缓存的同时与服务器同步)

【问题讨论】:

    标签: graphql apollo apollo-client apollo-cache-inmemory


    【解决方案1】:

    如果您想保持数据同步,即使它被其他用户更改,您需要始终从服务器获取或在服务器和客户端上实现订阅。这样,您就可以在数据更改时推送新事件,并让客户端订阅这些更改以实时更新缓存。

    【讨论】:

    • 啊,对了,现在越来越清楚了。但是client.query调用是否总是默认从服务器获取数据?
    • 可以使用fetchPolicy 选项在每个查询的基础上修改客户端的行为。 cache-first 是默认值。
    • 非常感谢。我现在明白了。 ??
    猜你喜欢
    • 2018-03-03
    • 1970-01-01
    • 2015-08-21
    • 2012-02-21
    • 1970-01-01
    • 1970-01-01
    • 2016-11-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多