TanStack Query
面向 Web 的异步状态管理与服务端状态工具库,支持 React、Vue、Svelte、Solid 等框架,提供请求缓存、自动重取、分页、无限滚动、变更提交与后台更新等能力,协议无关,REST、GraphQL、Promise 均可接入。
爱鲜报评分
0.0
0 人评分
5k
星数
否
中文
TypeScript
主语言
是
活跃
1144
贡献者
人工分析
EDITORIAL推荐理由
TanStack Query 是前端服务端状态管理的事实标准之一,50k+ Star 与多框架官方适配说明其生态成熟、维护活跃。它把缓存失效、重取、并发去重、分页等繁琐逻辑统一封装,能显著减少手写 loading/error 状态与重复请求代码。MIT 协议、TypeScript 编写,类型推导完善,适合中大型前端项目长期使用。
适用场景
- React/Vue/Svelte/Solid 应用中的数据请求与缓存管理
- 需要分页、无限滚动、预取与后台静默更新的列表页
- REST 或 GraphQL 接口的服务端状态同步与失效控制
- 表单提交后的乐观更新与缓存回滚
- SSR/全栈框架中的请求预取与注水
优点
- 多框架官方适配,API 设计一致,迁移成本低
- 缓存、重取、去重、分页、无限滚动开箱即用
- TypeScript 类型推导完善,开发体验好
- 社区活跃、文档体系完整,问题易检索
- 协议无关,REST、GraphQL、Promise 均可使用
缺点
- 概念较多(staleTime、gcTime、失效策略等),需理解缓存模型
- 并非全局状态管理替代品,客户端状态仍需其他方案
- 默认行为(如窗口聚焦重取)需按业务调整
- 深度定制缓存策略时调试成本较高
上手难度
进阶
TanStack Query 是什么
TanStack Query(原名 React Query)是一个用于 异步状态管理 的库,专注于「服务端状态」:从接口取回的数据、缓存、失效、重取与同步。它不绑定具体请求库,REST、GraphQL、任意 Promise 都能接入。
同一套核心逻辑通过官方适配覆盖多个框架:
- React Query
- Vue Query
- Svelte Query
- Solid Query
核心能力
- 请求与缓存:自动缓存查询结果,按 key 管理数据
- 重取与失效:窗口聚焦、网络重连、手动失效等触发更新
- 分页与无限滚动:内置分页与无限加载辅助 API
- 变更提交(Mutations):提交后自动失效相关查询,支持乐观更新与回滚
- 依赖查询与预取:按条件串行请求,提前预取下一页数据
- 请求取消与 Suspense:支持中止请求,React 下可配合 Suspense
使用示意
以 React 为例,通常先创建 QueryClient 并在应用根部提供 Provider,再用 hook 声明式地取数:
const { data, isLoading, error } = useQuery({
queryKey: ['todos'],
queryFn: () => fetch('/api/todos').then((r) => r.json()),
})
提交数据时使用 mutation,并在成功后让相关查询失效,从而触发自动刷新:
const mutation = useMutation({
mutationFn: (todo) => postTodo(todo),
onSuccess: () => queryClient.invalidateQueries({ queryKey: ['todos'] }),
})
具体安装方式与各框架的接入细节,请以官方文档为准。
适合谁
- 前端项目中接口调用分散、loading/error 状态重复代码多的团队
- 需要分页、无限滚动、后台静默更新的数据密集型页面
- 使用 TypeScript、希望获得良好类型推导的中大型项目
注意事项
TanStack Query 管理的是服务端状态,客户端的 UI 状态(弹窗开关、表单草稿等)仍建议交给专门的状态方案。默认的窗口聚焦重取等行为,也应根据业务场景调整 staleTime 等参数。
评论
- 暂无评论,来写第一条吧。