TanStack路由开发技能 tanstack-router

这个技能用于构建类型安全、基于文件的路由的React单页应用(SPA),集成TanStack Query,优化用于Cloudflare Workers部署,提高开发效率和代码质量。关键词包括:TanStack Router、React路由、TypeScript类型安全、文件路由、数据加载、Cloudflare Workers、前端开发。

前端开发 0 次安装 0 次浏览 更新于 3/7/2026

name: tanstack-router description: TanStack Router 类型安全、基于文件的路由库,适用于 React。用于单页应用(SPA)、集成 TanStack Query、Cloudflare Workers,或遇到开发者工具、类型安全、加载器、Vite 打包错误。 license: MIT allowed-tools: [Bash, Read, Write, Edit] metadata: version: 1.0.0 author: Claude Skills 维护者 last-verified: 2025-11-07 production-tested: true keywords: - tanstack router - react router - type-safe routing - file-based routing - client-side routing - spa routing - route loaders - data loading - navigation - vite plugin - cloudflare workers - tanstack query integration - typescript routing - route params - nested routes - code splitting

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.134.13(已验证 2025-11-07)

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(), // 必须在 react() 之前
    react(),
  ],
})

基本设置

// src/routes/__root.tsx
import { createRootRoute, Outlet } from '@tanstack/react-router'

export const Route = createRootRoute({
  component: () => (
    <div>
      <nav>
        <Link to="/">主页</Link>
        <Link to="/about">关于</Link>
      </nav>
      <hr />
      <Outlet />
    </div>
  ),
})

// src/routes/index.tsx
import { createFileRoute } from '@tanstack/react-router'

export const Route = createFileRoute('/')({
  component: () => <h1>主页</h1>,
})

// src/routes/about.tsx
import { createFileRoute } from '@tanstack/react-router'

export const Route = createFileRoute('/about')({
  component: () => <h1>关于页面</h1>,
})

// src/main.tsx
import { createRouter, RouterProvider } from '@tanstack/react-router'
import { routeTree } from './routeTree.gen' // 自动生成

const router = createRouter({ routeTree })

function App() {
  return <RouterProvider router={router} />
}

主要特性

1. 类型安全导航

// 完全类型化!
<Link to="/posts/$postId" params={{ postId: '123' }} />

// 如果路由不存在,TypeScript 错误
<Link to="/invalid-route" /> // ❌ 错误!

2. 路由加载器(数据获取)

// src/routes/posts.$postId.tsx
export const Route = createFileRoute('/posts/$postId')({
  loader: async ({ params }) => {
    const post = await fetchPost(params.postId) // 完全类型化!
    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(), // 第一个!
  react(),
]

错误 3:类型注册缺失

问题: Link to 未类型化。

解决方案:

// src/routeTree.gen.ts 是自动生成的
// 在 main.tsx 中导入以注册类型
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)
}

// 客户端路由
export const Route = createFileRoute('/posts')({
  loader: async () => {
    const posts = await fetch('/api/posts').then(r => r.json())
    return { posts }
  },
})

模板

所有模板在 ~/.claude/skills/tanstack-router/templates/

  1. package.json - 依赖项和版本
  2. vite.config.ts - Vite 插件设置
  3. basic-routes/ - 基于文件的路由结构
  4. route-with-loader.tsx - 数据加载示例
  5. query-integration.tsx - TanStack Query 模式
  6. nested-routes/ - 布局模式
  7. cloudflare-deployment.md - Workers 设置指南

参考文档

深度指南在 ~/.claude/skills/tanstack-router/references/

  1. file-based-routing.md - 路由结构约定
  2. type-safety.md - TypeScript 模式
  3. data-loading.md - 加载器和 TanStack Query
  4. cloudflare-workers.md - 部署指南
  5. common-errors.md - 所有 7+ 错误及解决方案
  6. 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 6.0, TypeScript 5.8
  • Cloudflare Workers(Wrangler 4.0)
  • TanStack Query v5.90.7

堆栈兼容性:

  • ✅ Cloudflare Workers + 静态资源
  • ✅ TanStack Query 集成
  • ✅ TypeScript 严格模式

最后更新: 2025-11-07 库版本: @tanstack/react-router v1.134.13