关于 tanstack-query-best-practices
面向 React 应用开发者的 TanStack Query 实践指南,涵盖数据获取、缓存、变更和服务端状态同步。按优先级组织规则,并为每条规则提供说明及正反示例。
主要功能
- 01查询键组织与缓存策略
- 02变更、乐观更新与错误处理
- 03预取和并行查询
- 04无限查询与 SSR 集成
- 05性能优化与离线支持
适用场景
- 01为新功能设计数据获取逻辑
- 02调整缓存和查询键配置
- 03实现变更与乐观更新
- 04排查 SSR 水合或分页问题
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ deckardger/ tanstack-agent-skills --skill tanstack-query-best-practices安装后在 Claude Code 中输入/tanstack-query-best-practices确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
rules/cache-defaults.mdcache-gc-time.mdcache-invalidation.mdcache-placeholder-vs-initial.mdcache-stale-time.mderr-error-boundaries.mderr-fallback-data.mderr-retry-config.mdinf-loading-guards.mdinf-max-pages.mdinf-page-params.mdmut-error-handling.mdmut-invalidate-queries.mdmut-loading-states.mdmut-mutation-state.mdmut-optimistic-updates.mdmut-rollback-context.mdnetwork-mode.mdparallel-use-queries.mdperf-notify-change-props.mdperf-placeholder-data.mdperf-select-transform.mdperf-structural-sharing.mdpersist-queries.mdpf-ensure-query-data.mdpf-intent-prefetch.mdpf-route-prefetch.mdpf-stale-time-config.mdqk-array-structure.mdqk-factory-pattern.md详细介绍
TanStack Query 最佳实践
在 React 应用中实现 TanStack Query(React Query)模式的综合指南。这些规则可优化数据获取、缓存、变更和服务器状态同步。
适用场景
- 创建新的数据获取逻辑
- 设置查询配置
- 实现变更和乐观更新
- 配置缓存策略
- 集成 SSR/SSG
- 重构现有数据获取代码
按优先级划分的规则类别
| 优先级 | 类别 | 规则 | 影响 |
|---|---|---|---|
| CRITICAL | 查询键 | 5 条规则 | 防止缓存错误和数据不一致 |
| CRITICAL | 缓存 | 5 条规则 | 优化性能和数据新鲜度 |
| HIGH | 变更 | 6 条规则 | 确保数据完整性和 UI 一致性 |
| HIGH | 错误处理 | 3 条规则 | 避免糟糕的用户体验 |
| MEDIUM | 预取 | 4 条规则 | 提升感知性能 |
| MEDIUM | 并行查询 | 2 条规则 | 支持动态并行获取 |
| MEDIUM | 无限查询 | 3 条规则 | 防止分页错误 |
| MEDIUM | SSR 集成 | 4 条规则 | 实现正确的水合 |
| LOW | 性能 | 4 条规则 | 减少不必要的重新渲染 |
| LOW | 离线支持 | 2 条规则 | 支持离线优先模式 |
快速参考
查询键(前缀:qk-)
qk-array-structure— 查询键始终使用数组qk-include-dependencies— 包含查询依赖的所有变量qk-hierarchical-organization— 按层级组织键(实体 → ID → 筛选条件)qk-factory-pattern— 在复杂应用中使用查询键工厂qk-serializable— 确保所有键部分均可序列化为 JSON
缓存(前缀:cache-)
cache-stale-time— 根据数据变化程度设置适当的 staleTimecache-gc-time— 配置 gcTime 以保留不活跃的查询cache-defaults— 在 QueryClient 层级设置合理的默认值cache-invalidation— 优先使用针对性失效,而非宽泛模式cache-placeholder-vs-initial— 了解占位数据与初始数据的区别
变更(前缀:mut-)
mut-invalidate-queries— 变更后始终使相关查询失效mut-optimistic-updates— 实现乐观更新,让 UI 响应更灵敏mut-rollback-context— 通过 onMutate 提供回滚上下文mut-error-handling— 妥善处理变更错误mut-loading-states— 使用 isPending 表示变更加载状态mut-mutation-state— 使用 useMutationState 跨组件跟踪状态
错误处理(前缀:err-)
err-error-boundaries— 配合 useQueryErrorResetBoundary 使用错误边界err-retry-config— 适当配置重试逻辑err-fallback-data— 在适当情况下提供回退数据
预取(前缀:pf-)
pf-intent-prefetch— 根据用户意图(悬停、聚焦)预取pf-route-prefetch— 在路由切换期间预取数据pf-stale-time-config— 预取时设置 staleTimepf-ensure-query-data— 使用 ensureQueryData 进行条件预取
无限查询(前缀:inf-)
inf-page-params— 始终提供 getNextPageParaminf-loading-guards— 获取更多数据前检查 isFetchingNextPageinf-max-pages— 对于大型数据集,可考虑设置 maxPages
SSR 集成(前缀:ssr-)
ssr-dehydration— 使用 dehydrate/hydrate 模式实现 SSRssr-client-per-request— 为每个请求创建 QueryClientssr-stale-time-server— 在服务端设置较高的 staleTimessr-hydration-boundary— 使用 HydrationBoundary 包裹
并行查询(前缀:parallel-)
parallel-use-queries— 使用 useQueries 实现动态并行查询query-cancellation— 正确实现查询取消
性能(前缀:perf-)
perf-select-transform— 使用 select 转换/筛选数据perf-structural-sharing— 利用结构共享perf-notify-change-props— 使用 notifyOnChangeProps 限制重新渲染perf-placeholder-data— 使用 placeholderData 实现即时 UI
离线支持(前缀:offline-)
network-mode— 配置网络模式以支持离线persist-queries— 配置查询持久化以支持离线
使用方法
rules/ 目录中的每个规则文件都包含:
- 说明 — 为什么这种模式很重要
- 错误示例 — 应避免的反模式
- 正确示例 — 推荐的实现方式
- 上下文 — 何时应用或跳过此规则
完整参考
如需详细指导和代码示例,请参阅 rules/ 目录中的各个规则文件。
评论
支持 Markdown