AX 爱鲜报

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 等参数。

评论

登录后才可评论与评分

0 条评论

  • 暂无评论,来写第一条吧。