Apollo 是否缓存从 Query 组件发出的查询?

Does Apollo cache the queries made from a Query component?

我有一个 Query 组件可以从 GraphQL 服务器检索数据,一切正常。

我目前正在向一个无状态子组件传递 props,我想通过将其设置为从本地 Apollo 缓存读取数据来使其无状态(子组件永远不能在父组件之前加载) ).

不过我遇到了错误。我从 docs 了解到,如果缓存中没有任何内容,readQuery 方法就会失败,但这正是让我感到困惑的地方:数据 应该 原样在缓存中在父组件之前加载。还是不是?

这是源代码:

调用readQuery 只是从缓存中读取一次,这几乎不是您想要的。 Query 组件订阅缓存中的更改并将在 cache-miss 上触发网络请求(假设您使用的是默认值 cache-first fetch policy)。您可以安全地在您的应用中使用多个 Query 组件来执行相同的查询——只要它们使用相同的 variables,呈现多个 Query 组件只会导致对您的单个请求服务器。

readQuery 只应在需要读取然后更新缓存的一部分时在 update 函数内使用——不要使用它来为组件提供数据。如果您只想从缓存中读取,可以使用 cache-only 策略,但同样,这很少需要,因为 Apollo 足够聪明,可以知道查询何时进行。