TanStack Router快速上手指南:10分钟从零搭建你的第一个文件式路由应用
【免费下载链接】router🤖 A client-first, server-capable, fully type-safe router and full-stack framework for the web (React and more).项目地址: https://gitcode.com/GitHub_Trending/ro/router
TanStack Router 是一款面向 React(及 Solid)等前端框架的客户端优先、类型安全的路由库与全栈框架,它支持文件式路由、路由数据加载、Schema 校验的搜索参数、内置缓存与预取等能力。本文将带你用 10 分钟时间,从零搭建第一个 TanStack Router 文件式路由应用。
为什么选择 TanStack Router?
对于新手来说,TanStack Router 相比传统路由方案有四个明显的吸引力:
- 🔒端到端类型安全:路由路径、动态参数、搜索参数全程 TypeScript 推导,拼错路径编辑器直接报错;
- 📁文件式路由:像文件目录一样组织路由,所见即所得,新人上手零成本;
- ⚡数据加载与缓存:路由自带 loader,页面进入前先取好数据,还内置缓存、预取与失效机制;
- 🧩嵌套布局与代码分割:支持嵌套布局、视图过渡、错误边界,插件还能自动按路由切分代码包。
官方文档对文件式路由的描述非常直白:它比代码式路由更简单、更利于组织、更可扩展,还能自动生成类型关联,是官方推荐的方式(详见 file-based-routing.md)。
安装:一条命令创建项目
最快的方式是使用 TanStack CLI 脚手架,一条命令即可生成完整项目:
npx @tanstack/cli create --router-onlyCLI 会引导你回答几个问题:选择文件式路由还是代码式路由、是否启用 TypeScript、是否集成 Tailwind CSS、选择构建工具链等。完成后项目即可直接运行。
如果你要在已有项目中接入,只需确认环境满足(React 18+ 且带createRoot支持、建议 TypeScript 5.3+),然后安装核心包:
npm install @tanstack/react-router💡 完整的前置条件与安装说明见 install.md,快速入门入口见 quick-start.md。
接入 Vite 插件,启用文件式路由
文件式路由需要一个构建插件来"扫描目录、生成路由树"。以 Vite 为例,额外安装 router-plugin:
npm install -D @tanstack/router-plugin然后在vite.config.ts中注册插件(注意:要放在@vitejs/plugin-react之前):
import { defineConfig } from 'vite' import react from '@vitejs/plugin-react' import { tanstackRouter } from '@tanstack/router-plugin/vite' export default defineConfig({ plugins: [ tanstackRouter({ target: 'react', autoCodeSplitting: true, }), react(), ], })插件默认会把./src/routes作为路由目录、把生成的路由树写到./src/routeTree.gen.ts——大多数项目无需任何额外配置。更多细节见 with-vite.md。
文件命名约定:看懂这 4 个符号就够用了
文件式路由的核心是文件名即路由。掌握下面几个符号,就能读懂绝大多数路由目录:
| 符号 | 含义 | 示例 |
|---|---|---|
__root.tsx | 根路由文件,必须位于路由目录根部 | __root.tsx |
.(点) | 表示路由嵌套层级 | settings.profile.tsx→/settings/profile |
$(美元符) | 动态路径参数 | posts.$postId.tsx→/posts/$postId |
_(前缀) | 无路径布局路由,不占 URL | _app.tsx |
-(前缀) | 文件被路由树忽略,可存放普通逻辑 | -helpers.ts |
你可以直接使用目录嵌套(posts/$postId.tsx),也可以用扁平点号命名(posts.$postId.tsx),两者甚至可以混合使用。完整命名规则见 file-naming-conventions.md。
10 分钟实战:搭建第一个路由目录
下面是一个典型的最小路由结构(仓库中的 examples/react/basic-file-based 示例就是这样的组织方式):
src/ ├─ main.tsx # 应用入口 ├─ routeTree.gen.ts # 插件自动生成的路由树(勿手改) └─ routes/ ├─ __root.tsx # 根路由:放全局布局 ├─ index.tsx # 匹配 / ├─ about.tsx # 匹配 /about └─ posts/ ├─ index.tsx # 匹配 /posts └─ $postId.tsx # 匹配 /posts/123你只需在main.tsx中创建 router 并渲染,之后每新建一个路由文件,保存即可访问对应 URL——不需要在任何地方手动注册路由。
开发过程中,装上 router-devtools 会非常爽:它会在浏览器里实时展示路由树、匹配情况、状态与加载数据,调试路由问题一目了然(可参考 basic-devtools-panel 示例)。
常见延伸玩法:新手最值得了解的 3 个功能
搭建完成后,这三个功能可以立刻提升开发体验:
- 搜索参数 Schema 校验——给路由声明一个 Zod/Valibot schema,
?page=abc这样的非法参数会在导航时就被拦截,并自动转为友好的校验错误页(见 validate-search-params.md); - 路由数据加载——在路由文件中定义 loader,导航时自动请求数据、自动缓存,切换路由几乎零等待(见 contenteditable="false">【免费下载链接】router🤖 A client-first, server-capable, fully type-safe router and full-stack framework for the web (React and more).
项目地址: https://gitcode.com/GitHub_Trending/ro/router
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考