何时使用 apollo-link-state 以及何时使用 apollo-cache-inmemory

Posted

技术标签:

【中文标题】何时使用 apollo-link-state 以及何时使用 apollo-cache-inmemory【英文标题】:When to use apollo-link-state and when to use apollo-cache-inmemory 【发布时间】:2018-11-10 19:49:01 【问题描述】:

我们正在慢慢地将 graphql 添加到我们的 react 项目中,并替换现有的 redux 集成。所以我试图了解 apollo 中的缓存并看到了两件事。

    apollo-cache-inmemory (https://www.npmjs.com/package/apollo-cache-inmemory) apollo-link-state (https://github.com/apollographql/apollo-link-state)

我们有查询调用主页上的应用程序列表,这个应用程序列表将在其他页面上使用。所以我尝试的一个选项是调用父容器中的应用程序查询列表并在子页面中使用 client.readQuery,这样对 graphql 服务器的调用将仅在容器中发生,而在其他页面中它将发生从缓存中调用。但是我看到了一些关于在与此类似的场景中使用 apollo-link-state 的帖子。那么这里用什么方法最好,什么时候用apollo-cache-inmemory,什么时候用apollo-link-state?

【问题讨论】:

【参考方案1】:

您不应将apollo-cache-inmemory 直接与apollo-link-state 进行比较。 apollo-cache-inmemory 用于处理Apollo Client 上的缓存,您无需编写任何自定义代码即可使其工作(除了告诉Apollo Client 使用它)。您从api 获取的任何数据都会自动缓存。

apollo-link-state 但是用于客户端缓存,例如浏览器的 NetworkStatus 或当前活动选项卡。通常不发送回后端服务器的状态。

因此,您只需要考虑是否需要客户端缓存。在我看到的大多数情况下,一个项目最终会同时使用两者。

【讨论】:

以上是关于何时使用 apollo-link-state 以及何时使用 apollo-cache-inmemory的主要内容,如果未能解决你的问题,请参考以下文章

导入错误:无法从“apollo-link-state/lib/bundle.umd.js”中找到模块“graphql”

如何在 apollo-link-state 中标准化状态?

Apollo 客户端和更新表单

使用以未定义缓存状态结尾的 apollo-cache-persist 和 apollo-link-state

何时使用类别以及何时使用子类化? [关闭]

何时使用 GetXXX() 方法以及何时使用 Getter 属性