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

时间:2019-05-18 21:23:20

标签: reactjs apollo react-apollo apollo-client

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

我当前正在传递道具到一个无状态的子组件,我想通过将其设置为从本地Apollo缓存中读取数据来使其成为无子组件(子组件永远不能在父组件之前加载)。

我遇到一个错误。我从docs获悉,如果缓存中没有任何内容,readQuery方法就会失败,但这令我感到困惑:数据应该存放在缓存中,因为之前在父组件。还是不是?

这是源代码:

1 个答案:

答案 0 :(得分:1)

调用readQuery仅从缓存中读取一次,这几乎是您所需要的。 Query组件订阅高速缓存中的更改,并会在高速缓存未命中时触发网络请求(假设您使用的是默认的cache-first fetch policy)。您可以在应用中安全地利用多个Query组件进行相同的查询-只要它们使用相同的variables,呈现多个Query组件只会对您的请求产生一个请求服务器。

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