Skip to main content

预取数据 Prefetching

如果你足够幸运,那么你可能对用户将做的事情有足够的了解,以便能够在需要之前预取他们所需的数据! 在这种情况下,可以使用prefetchQuery方法预取要放入缓存的查询结果:

const prefetchTodos = async () => {
// 该查询的结果将像普通查询一样被缓存
await queryClient.prefetchQuery({
queryKey: ["todos"],
queryFn: fetchTodos,
});
};
  • 如果此查询的数据已经在缓存中并且没有失效,则将不会获取该数据
  • 如果一个staleTime被传递,例如:prefetchQuery(['todos'], fn, {staleTime:5000}),当数据早于指定的 staleTime 时,则查询将去尝试获取新值
  • 如果一个预取的查询没有出现useQuery实例,则将在cacheTime指定的时间之后被删除并被垃圾回收

手动启动一个查询

或者,如果你已经有同步可用的查询数据,则无需预取。 你可以只使用Query Client 的setQueryData方法直接按键值添加或更新查询的缓存结果。

queryClient.setQueryData(["todos"], todos);

延伸阅读

如果想深入了解如何在获取数据之前将其放入查询缓存,请查看此社区资源