我有一个Query
组件,可以从GraphQL服务器检索数据,并且一切正常。
我当前正在传递道具到一个无状态的子组件,我想通过将其设置为从本地Apollo缓存中读取数据来使其成为无子组件(子组件永远不能在父组件之前加载)。
我遇到一个错误。我从docs获悉,如果缓存中没有任何内容,readQuery
方法就会失败,但这令我感到困惑:数据应该存放在缓存中,因为之前在父组件。还是不是?
这是源代码:
答案 0 :(得分:1)
调用readQuery
仅从缓存中读取一次,这几乎是您所需要的。 Query
组件订阅高速缓存中的更改,并会在高速缓存未命中时触发网络请求(假设您使用的是默认的cache-first
fetch policy)。您可以在应用中安全地利用多个Query
组件进行相同的查询-只要它们使用相同的variables
,呈现多个Query
组件只会对您的请求产生一个请求服务器。
readQuery
仅应在update
函数内部使用,当您需要读取然后更新缓存的一部分时-请勿使用它为组件提供数据。如果您只想从缓存中读取数据,则可以使用cache-only
策略,但是再次需要这样做,因为Apollo足够聪明,可以知道何时进行查询。