用途
该技能面向需要将 TanStack Query 与 TanStack Router 或 TanStack Start 组合使用的场景,帮助开发者建立正确的集成模式,避免路由数据加载出现瀑布流、手写 hydration 或误用 Next.js 心智模型等问题。
主要能力
- 将 QueryClient 放入 router context,使路由的 loader 可以访问 queryClient。
- 在 createFileRoute 的 loader 中使用 context.queryClient.ensureQueryData 预取路由关键数据。
- 组件侧继续使用 useQuery 或 useSuspenseQuery,保持活跃的 Query observer。
- 在 Router SSR 场景下,使用 setupRouterSsrQueryIntegration 处理脱水、水合、流式查询结果、重定向和 provider 包装。
- 当 Query 负责服务端状态新鲜度时,设置 defaultPreloadStaleTime: 0。
使用方式
基础设置:创建 QueryClient,通过 createRouter 的 context 传入 queryClient,并在 createFileRoute 的 loader 中调用 ensureQueryData。组件中使用 useSuspenseQuery 读取同一 query 定义。
Router SSR 集成:使用 @tanstack/react-router-ssr-query 提供的 setupRouterSsrQueryIntegration,传入 router 和 queryClient,由集成层处理 SSR 相关逻辑。
适用场景
- 使用 TanStack Router 构建 React 应用,并希望用 TanStack Query 管理服务端状态。
- 使用 TanStack Start,需要按 Router 的文件路由、loader、server functions 和 Router SSR 方式组织数据加载。
- 需要路由级预取数据,同时保留 Query 的重新获取、失效和垃圾回收语义。
限制与注意事项
- 仅组件内使用 useSuspenseQuery 而不在 loader 中预取,会导致路由数据瀑布流。
- 手写 Router hydration 会绕过集成层对脱水、水合、流式结果和重定向的处理。
- 不应将 Next.js 的 app/pages API 心智模型直接套用到 TanStack Start。
- 仅读取 loader 数据而不使用 Query observer,会失去重新获取、失效和垃圾回收等能力。
- 具体版本要求、安装命令和完整 API 细节暂未提供。