Skip to content

TanStack Query

v5.x
TypeScript

概述

TanStack Query (原 Vue Query) 是一个强大的异步状态管理库,专门用于处理服务端状态。它解决了传统数据请求的诸多痛点:缓存管理、重复请求去重、后台数据同步、分页等。

为什么使用 TanStack Query?
  • 自动缓存:相同 queryKey 自动复用缓存数据
  • 后台刷新:窗口聚焦时自动重新获取最新数据
  • 请求去重:多个组件同时请求自动合并
  • 乐观更新:mutation 时可先更新 UI,失败再回滚
  • 分页与无限滚动:内置支持,无需自行实现

技术特性

特性说明
缓存策略stale-while-revalidate
重试机制自动重试失败请求
请求去重相同 queryKey 自动去重
后台刷新窗口聚焦/网络恢复时刷新
开发工具@tanstack/vue-query-devtools
TypeScript完整类型支持

核心概念

Query vs Mutation

概念用途HTTP 方法
Query获取数据(读)GET
Mutation修改数据(写)POST, PUT, PATCH, DELETE

基础用法

useQuery - 数据查询

composables/useUsers.ts

在组件中使用

UserList.vue

响应式参数(重要!)

最常见的错误

当 composable 需要接收参数时,参数类型必须是 Ref<T>,否则参数变化不会触发重新请求!

正确写法

composables/useCourses.ts

在页面中使用

CourseList.vue

错误写法

错误示例

useMutation - 数据变更

composables/useUsers.ts

使用 Mutation

CreateUserForm.vue

条件查询

使用 enabled 控制何时执行查询:

条件查询
enabled 必须是 computed

如果 enabled 依赖响应式数据,必须用 computed() 包裹,否则条件变化不会生效。

手动控制

手动刷新

缓存失效

缓存失效

最佳实践

开发建议
  1. queryKey 设计:使用数组,按层级组织,如 ['users', userId, 'orders']
  2. staleTime 设置:根据数据更新频率设置,避免过度请求
  3. 错误处理:httpClient 已统一处理,无需在 onError 中重复 toast
  4. 缓存失效:mutation 成功后记得 invalidateQueries
  5. 类型安全:充分利用 TypeScript 类型推导

完整示例

composables/useProducts.ts

相关资源

Released under the MIT License.