SuperAPI AI 工具集

tanstack-query-intent-compositions-compose-query-with-t-d0bcdebe

前端与建站

查看项目

更新于 10-16 09:23

技能介绍

用途

该技能面向需要将 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 细节暂未提供。