@ apollo / react-hooks,如何首先查询缓存?

时间:2020-07-01 18:43:28

标签: apollo react-apollo apollo-client

我正在寻找一种便捷的方法来设置我的阿波罗挂钩,以便首先查询缓存,如果缓存为空,则进行端点调用。

我似乎找不到合适的文档,只是找到了如何查询缓存并进行常规查询。

1 个答案:

答案 0 :(得分:1)

Apollo Client允许您为使用fetchPolicy进行的单个查询指定useQuery。可能的值include

  • 缓存优先::这是默认值,我们始终尝试首先从您的缓存中读取数据。如果满足查询所需的所有数据都在高速缓存中,则将返回该数据。仅当没有缓存结果时,Apollo才会从网络获取。此提取策略旨在最大程度地减少渲染组件时发送的网络请求。
  • 缓存和网络::此提取策略将使Apollo首先尝试从缓存中读取数据。如果满足查询所需的所有数据都在高速缓存中,则将返回该数据。但是,无论缓存中是否有完整数据,该fetchPolicy始终会通过网络接口执行查询,这与缓存优先不同,后者仅在查询数据不在缓存中时才执行查询。此提取策略可优化用户的响应速度,同时还可以使缓存的数据与服务器数据保持一致,但需要额外的网络请求。
  • 仅限网络:此提取策略将永远不会从缓存中返回初始数据。相反,它将始终使用您的网络接口向服务器发出请求。这种获取策略可优化与服务器的数据一致性,但是会以可用时对用户的即时响应为代价。
  • 仅用于缓存:此提取策略将永远不会使用您的网络界面执行查询。相反,它将始终尝试从缓存中读取。如果用于查询的数据在缓存中不存在,则将引发错误。此获取策略允许您仅与本地客户端缓存中的数据进行交互,而无需发出任何网络请求,从而使组件保持快速运行,但是这意味着您的本地数据可能与服务器上的数据不一致。如果只对与ApolloClient缓存中的数据进行交互感兴趣,还请确保查看ApolloClient实例上可用的readQuery()和readFragment()方法。
  • 无缓存::此提取策略将永远不会从缓存中返回您的初始数据。相反,它将始终使用您的网络接口向服务器发出请求。与仅限网络的策略不同,查询完成后,它也不会将任何数据写入缓存。

由于cache-first是默认设置,因此您无需执行任何其他操作即可获得所需的行为。