失效、重取与取消
查询缓存不是永久真相。写入成功后,相关 query 需要被标记 stale,并在有活动观察者时重取;直接把所有 query 都清空会造成闪烁和不必要请求。
ts
await queryClient.invalidateQueries({ queryKey: ['todos', { userId }] })查询函数收到的 signal 应传给 fetch 或客户端:
ts
queryFn: async ({ signal }) => {
const response = await fetch(`/api/todos?user=${userId}`, { signal })
if (!response.ok) throw new Error(`HTTP ${response.status}`)
return response.json()
}组件卸载或 query 变为无观察者时,库可以取消请求;如果 queryFn 忽略 signal,网络可能仍继续消耗资源。取消与服务端错误要分开记录,取消不应显示“服务器故障”。
练习
设计“归档订单”成功后的更新策略:列表、详情和计数器分别如何失效或直接更新?再说明用户离开页面时请求如何停止。
下一步
完成练习后打开本章答案,再回到TanStack Query 课程总览。