关于 tanstack-router
面向使用 TanStack Router 和 TypeScript 构建 React SPA 的开发者,介绍文件路由、类型安全导航、路由数据加载及 Cloudflare Workers 部署。
主要功能
- 01类型安全导航模式
- 02文件路由配置
- 03用于数据获取的路由加载器
- 04TanStack Query 集成
- 05Cloudflare Workers 部署指南
- 06模板与故障排查参考
适用场景
- 01为 React SPA 配置文件路由
- 02使用类型化参数加载路由数据
- 03将路由加载器与 TanStack Query 集成
- 04配置项目以部署到 Cloudflare Workers
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ secondsky/ claude-skills --skill tanstack-router安装后在 Claude Code 中输入/tanstack-router确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/common-errors.mdtemplates/package.jsonroute-examples.tsxvite.config.ts详细介绍
TanStack Router 技能
使用 TanStack Router 为 React SPA 构建类型安全的基于文件的路由,并针对部署到 Cloudflare Workers 进行了优化。
适用场景
提及以下内容时会自动触发:
- “TanStack Router”或“类型安全路由”
- “基于文件的路由”或“路由配置”
- 强调 TypeScript 的“React 路由”
- “路由加载器”或“在路由中加载数据”
- “Cloudflare Workers 路由”
在以下场景中使用此技能:
- 使用类型安全导航构建 SPA
- 实现基于文件的路由(类似 Next.js)
- 需要路由级别的数据加载
- 将路由与 TanStack Query 集成
- 部署到 Cloudflare Workers
- 希望获得比 React Router 更好的 TypeScript 支持
快速开始
安装
bun add @tanstack/react-router @tanstack/router-devtools
bun add -d @tanstack/router-plugin
最新版本: v1.170.18(已于 2026-08-03 验证)
Vite 配置
// vite.config.ts
import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react'
import { TanStackRouterVite } from '@tanstack/router-plugin/vite'
export default defineConfig({
plugins: [
TanStackRouterVite(), // MUST come before react()
react(),
],
})
基本设置
// src/routes/__root.tsx
import { createRootRoute, Outlet } from '@tanstack/react-router'
export const Route = createRootRoute({
component: () => (
<div>
<nav>
<Link to="/">Home</Link>
<Link to="/about">About</Link>
</nav>
<hr />
<Outlet />
</div>
),
})
// src/routes/index.tsx
import { createFileRoute } from '@tanstack/react-router'
export const Route = createFileRoute('/')({
component: () => <h1>Home Page</h1>,
})
// src/routes/about.tsx
import { createFileRoute } from '@tanstack/react-router'
export const Route = createFileRoute('/about')({
component: () => <h1>About Page</h1>,
})
// src/main.tsx
import { createRouter, RouterProvider } from '@tanstack/react-router'
import { routeTree } from './routeTree.gen' // Auto-generated
const router = createRouter({ routeTree })
function App() {
return <RouterProvider router={router} />
}
主要功能
1. 类型安全导航
// Fully typed!
<Link to="/posts/$postId" params={{ postId: '123' }} />
// TypeScript error if route doesn't exist
<Link to="/invalid-route" /> // ❌ Error!
2. 路由加载器(数据获取)
// src/routes/posts.$postId.tsx
export const Route = createFileRoute('/posts/$postId')({
loader: async ({ params }) => {
const post = await fetchPost(params.postId) // Fully typed!
return { post }
},
component: ({ useLoaderData }) => {
const { post } = useLoaderData()
return <h1>{post.title}</h1>
},
})
3. TanStack Query 集成
import { queryOptions } from '@tanstack/react-query'
const postQueryOptions = (postId: string) =>
queryOptions({
queryKey: ['posts', postId],
queryFn: () => fetchPost(postId),
})
export const Route = createFileRoute('/posts/$postId')({
loader: ({ context: { queryClient }, params }) =>
queryClient.ensureQueryData(postQueryOptions(params.postId)),
component: () => {
const { postId } = Route.useParams()
const { data: post } = useQuery(postQueryOptions(postId))
return <h1>{post.title}</h1>
},
})
常见错误与解决方案
错误 1:开发工具依赖解析
问题: 构建失败,提示找不到 @tanstack/router-devtools-core。
解决方案:
bun add @tanstack/router-devtools
错误 2:Vite 插件顺序
问题: 路由未自动生成。
解决方案: TanStackRouterVite 必须放在 react() 之前:
plugins: [
TanStackRouterVite(), // First!
react(),
]
错误 3:缺少类型注册
问题: Link to 没有类型提示。
解决方案:
// src/routeTree.gen.ts is auto-generated
// Import it in main.tsx to register types
import { routeTree } from './routeTree.gen'
错误 4:加载器未运行
问题: 导航时未调用加载器函数。
解决方案: 确保路由导出 Route:
export const Route = createFileRoute('/path')({ loader: ... })
错误 5:表单导致内存泄漏
问题: 使用 TanStack Form + Router 时,生产环境发生崩溃。
解决方案: 这是一个已知问题(#5734)。临时解决方法:改用 React Hook Form,或等待修复。
部署到 Cloudflare Workers
Vite 配置
import { defineConfig } from 'vite'
import { TanStackRouterVite } from '@tanstack/router-plugin/vite'
import { cloudflare } from '@cloudflare/vite-plugin'
export default defineConfig({
plugins: [
TanStackRouterVite(),
react(),
cloudflare(),
],
})
API 后端模式
// functions/api/posts.ts
export async function onRequestGet({ env }) {
const { results } = await env.DB.prepare('SELECT * FROM posts').all()
return Response.json(results)
}
// Client-side route
export const Route = createFileRoute('/posts')({
loader: async () => {
const posts = await fetch('/api/posts').then(r => r.json())
return { posts }
},
})
模板
所有模板均位于 ~/.claude/skills/tanstack-router/templates/:
- package.json - 依赖项和版本
- vite.config.ts - Vite 插件设置
- basic-routes/ - 基于文件的路由结构
- route-with-loader.tsx - 数据加载示例
- query-integration.tsx - TanStack Query 模式
- nested-routes/ - 布局模式
- cloudflare-deployment.md - Workers 设置指南
参考文档
深入指南位于 ~/.claude/skills/tanstack-router/references/:
- file-based-routing.md - 路由结构约定
- type-safety.md - TypeScript 模式
- data-loading.md - 加载器和 TanStack Query
- cloudflare-workers.md - 部署指南
- common-errors.md - 所有 7 个以上错误及其解决方案
- migration-guide.md - 从 React Router 迁移
与现有技能集成
可配合使用:
- tanstack-query - 推荐用于数据获取
- tanstack-table - 展示路由中的数据
- cloudflare-worker-base - API 后端
- tailwind-v4-shadcn - UI 样式
令牌效率
不使用此技能: 约 10k 个令牌,40–50 分钟,3–4 个错误
使用此技能: 约 4k 个令牌,15–20 分钟,0 个错误
节省: 60% 令牌,65% 时间
生产环境验证
已测试:
- React 19.2、Vite 7.3、TypeScript 5.9
- Cloudflare Workers(Wrangler 4.0)
- TanStack Query v5.101.4
技术栈兼容性:
- ✅ Cloudflare Workers + Static Assets
- ✅ TanStack Query 集成
- ✅ TypeScript 严格模式
最后更新: 2026-08-03
库版本: @tanstack/react-router v1.170.18