TanStack Query 在 React 中的完整新手指南(v5)
面向对象:第一次接触 TanStack Query 的同学(React 18+)
学习目标:掌握useQuery、useMutation的核心参数、状态和常见业务写法
1. 先搞懂它到底解决什么问题
在 React 里直接用 fetch + useEffect,你很快会遇到这些问题:
- 同一个接口被重复请求
- 切页面回来又要重新写加载状态
- 缓存、重试、后台刷新、错误重试都要自己管
TanStack Query 把这些“服务端状态管理”统一处理了。
useQuery:读数据(GET)useMutation:写数据(POST/PUT/PATCH/DELETE)
2. 官方默认行为(新手一定要先知道)
这部分来自官方 Important Defaults,很多“看起来奇怪”的行为其实是默认配置:
- Query 默认会被认为是
stale(过期)。 - 过期 Query 在这些时机可能自动重新请求:组件挂载、窗口重新聚焦、网络恢复。
- 非活跃 Query(页面没在用)默认约
5分钟后被垃圾回收(gcTime)。 - Query 默认失败重试
3次(指数退避)。 - Mutation 默认失败不重试(
retry: 0)。
3. 安装和初始化(只做一次)
4. useQuery:核心参数 + 返回值
4.1 基本写法
4.2 useQuery 主要参数(按优先级)
4.3 useQuery 常见返回值
5. useQuery 常用场景(带示例)
5.1 场景 A:页面打开自动拉列表
5.2 场景 B:依赖查询(Dependent Query)
先拿用户,再拿该用户的项目。官方建议用 enabled 控制第二个查询。
5.3 场景 C:分页查询避免 UI 闪烁(官方 keepPreviousData)
5.4 场景 D:懒查询(enabled: false)的正确理解
官方要点(很重要):
enabled: false时不会自动请求。- 会忽略
invalidateQueries/refetchQueries的自动触发能力。 - 这种写法偏命令式。若只是“有关键词再查”,更推荐:
6. useMutation:核心参数 + 返回值
6.1 基本写法
6.2 useMutation 主要参数
6.3 useMutation 常见返回值
7. useMutation 常用场景(带示例)
7.1 场景 A:新增成功后失效刷新(官方推荐)
7.2 场景 B:用 mutation 返回值直接更新缓存(官方 setQueryData)
注意:setQueryData 必须返回新对象,不要原地修改旧对象。
7.3 场景 C:乐观更新(官方常见模板)
8. 新手最容易踩的坑
- 把写操作放进
useQuery,导致语义和状态都混乱。 queryKey没带参数,分页/筛选共用同一缓存。- 看到
isFetching就整页 loading,体验会闪烁。 enabled: false用多了,失去 TanStack Query 的声明式优势。- 忘记把
signal传给请求函数,取消请求能力失效。 setQueryData直接改旧对象,导致缓存更新行为异常。
9. 实战记忆卡(新人版)
- GET:
useQuery - POST/PUT/PATCH/DELETE:
useMutation - 提交成功后优先考虑:
invalidateQueries - 首屏 loading:
isPending - 后台刷新提示:
isFetching - 依赖条件查询:
enabled - 分页不闪屏:
placeholderData: keepPreviousData
10. 官方文档(建议按顺序看)
- Quick Start
https://tanstack.com/query/v5/docs/framework/react/quick-start useQueryAPI
https://tanstack.com/query/v5/docs/framework/react/reference/useQueryuseMutationAPI
https://tanstack.com/query/v5/docs/framework/react/reference/useMutation- Query Keys
https://tanstack.com/query/v5/docs/framework/react/guides/query-keys - Dependent Queries
https://tanstack.com/query/v5/docs/framework/react/guides/dependent-queries - Disabling/Pausing Queries
https://tanstack.com/query/v5/docs/framework/react/guides/disabling-queries - Paginated Queries
https://tanstack.com/query/v5/docs/framework/react/guides/paginated-queries - Query Cancellation
https://tanstack.com/query/v5/docs/framework/react/guides/query-cancellation - Invalidations from Mutations
https://tanstack.com/query/v5/docs/framework/react/guides/invalidations-from-mutations - Updates from Mutation Responses
https://tanstack.com/query/v5/docs/framework/react/guides/updates-from-mutation-responses - Optimistic Updates
https://tanstack.com/query/v5/docs/framework/react/guides/optimistic-updates - Important Defaults
https://tanstack.com/query/v5/docs/framework/react/guides/important-defaults

