GraphQL:Apollo 客户端缓存如何工作以保持数据与服务器的一致性?

GraphQL: how does Apollo client caching work to keep data consistency with the server?

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

假设我有 2 个页面:项目列表 页面和项目详细信息 页面。

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

获取数据

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

现在,在导航回 项目列表 页面之前,假设我的应用程序的另一个用户对项目 A 进行了更改。

我的问题:

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

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

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