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 足够聪明,可以知道查询何时进行。
我有一个 Query
组件可以从 GraphQL 服务器检索数据,一切正常。
我目前正在向一个无状态子组件传递 props,我想通过将其设置为从本地 Apollo 缓存读取数据来使其无状态(子组件永远不能在父组件之前加载) ).
不过我遇到了错误。我从 docs 了解到,如果缓存中没有任何内容,readQuery
方法就会失败,但这正是让我感到困惑的地方:数据 应该 原样在缓存中在父组件之前加载。还是不是?
这是源代码:
调用readQuery
只是从缓存中读取一次,这几乎不是您想要的。 Query
组件订阅缓存中的更改并将在 cache-miss 上触发网络请求(假设您使用的是默认值 cache-first
fetch policy)。您可以安全地在您的应用中使用多个 Query
组件来执行相同的查询——只要它们使用相同的 variables
,呈现多个 Query
组件只会导致对您的单个请求服务器。
readQuery
只应在需要读取然后更新缓存的一部分时在 update
函数内使用——不要使用它来为组件提供数据。如果您只想从缓存中读取,可以使用 cache-only
策略,但同样,这很少需要,因为 Apollo 足够聪明,可以知道查询何时进行。