服务端阅读 05月29日 01:20
React Query 的缓存机制是如何工作的,如何配置和管理缓存?
React Query 缓存的核心是两个时间参数:staleTime 决定数据何时被标记为"过期"(默认 0,即立即过期),gcTime(原 cacheTime)决定数据何时被垃圾回收(默认 5 分钟)。数据在 staleTime 内不会重新请求,但窗口聚焦时会触发 refetch;超过 gcTime 且无观察者的查询会被从缓存清除。管理缓存的三个关键 API:queryClient.invalidateQueries() 标记失效并触发重新获取、queryClient.setQueryData() 直接更新缓存数据、queryClient.removeQueries() 彻底移除缓存条目。对于需要持久化的场景,可借助 persistQueryClient 将缓存写入 localStorage。追问staleTime 设为 Infinity 意味着什么?什么场景下合理?invalidateQueries 和 resetQueries 的区别是什么?如何利用 queryKey 层级结构实现局部失效(如只刷新某个用户下的 todo 列表)?窗口聚焦 refetch 在移动端或 Electron 中表现如何?如何关闭?持久化缓存到 localStorage 时如何处理敏感数据和版本不一致问题?写段代码const queryClient = new QueryClient({ defaultOptions: { queries: { staleTime: 5 * 60_000, gcTime: 30 * 60_000 } }})// mutation 成功后局部失效const mu = useMutation(updateTodo, { onSuccess: () => queryClient.invalidateQueries(['todos'])})