TanStack Router 的大部分文档都是为基于文件的路由编写的,旨在帮助您更详细地了解如何配置基于文件的路由以及其工作原理的技术细节。虽然基于文件的路由是配置 TanStack Router 的首选和推荐方式,但如果您愿意,也可以使用基于代码的路由。
基于文件的路由是一种使用文件系统配置路由的方式。您可以使用一系列代表应用程序路由层次结构的文件和目录来定义路由,而不是通过代码定义路由结构。这带来了许多好处:
虽然目录长期以来一直用于表示路由层次结构,但基于文件的路由引入了一个额外的概念,即在文件名中使用 . 字符来表示路由嵌套。这允许您避免为少数深度嵌套的路由创建目录,并继续为更广泛的路由层次结构使用目录。让我们看一些例子!
目录可用于表示路由层次结构,这对于将多个路由组织成逻辑组以及减少大量深度嵌套路由组的文件名长度很有用。
请参见下面的示例:
| Filename | Route Path | Component Output |
|---|---|---|
| ʦ __root.tsx | <Root> | |
| ʦ index.tsx | / (exact) | <Root><RootIndex> |
| ʦ about.tsx | /about | <Root><About> |
| ʦ posts.tsx | /posts | <Root><Posts> |
| 📂 posts | ||
| ┄ ʦ index.tsx | /posts (exact) | <Root><Posts><PostsIndex> |
| ┄ ʦ $postId.tsx | /posts/$postId | <Root><Posts><Post> |
| 📂 posts_ | ||
| ┄ 📂 $postId | ||
| ┄ ┄ ʦ edit.tsx | /posts/$postId/edit | <Root><EditPost> |
| ʦ settings.tsx | /settings | <Root><Settings> |
| 📂 settings | <Root><Settings> | |
| ┄ ʦ profile.tsx | /settings/profile | <Root><Settings><Profile> |
| ┄ ʦ notifications.tsx | /settings/notifications | <Root><Settings><Notifications> |
| ʦ _pathlessLayout.tsx | <Root><PathlessLayout> | |
| 📂 _pathlessLayout | ||
| ┄ ʦ route-a.tsx | /route-a | <Root><PathlessLayout><RouteA> |
| ┄ ʦ route-b.tsx | /route-b | <Root><PathlessLayout><RouteB> |
| 📂 files | ||
| ┄ ʦ $.tsx | /files/$ | <Root><Files> |
| 📂 account | ||
| ┄ ʦ route.tsx | /account | <Root><Account> |
| ┄ ʦ overview.tsx | /account/overview | <Root><Account><Overview> |
扁平路由使您能够使用 . 来表示路由嵌套级别。
当您有大量独特的深度嵌套路由并希望避免为每个路由创建目录时,这会很有用:
请参见下面的示例:
| Filename | Route Path | Component Output |
|---|---|---|
| ʦ __root.tsx | <Root> | |
| ʦ index.tsx | / (exact) | <Root><RootIndex> |
| ʦ about.tsx | /about | <Root><About> |
| ʦ posts.tsx | /posts | <Root><Posts> |
| ʦ posts.index.tsx | /posts (exact) | <Root><Posts><PostsIndex> |
| ʦ posts.$postId.tsx | /posts/$postId | <Root><Posts><Post> |
| ʦ posts_.$postId.edit.tsx | /posts/$postId/edit | <Root><EditPost> |
| ʦ settings.tsx | /settings | <Root><Settings> |
| ʦ settings.profile.tsx | /settings/profile | <Root><Settings><Profile> |
| ʦ settings.notifications.tsx | /settings/notifications | <Root><Settings><Notifications> |
| ʦ _pathlessLayout.tsx | <Root><PathlessLayout> | |
| ʦ _pathlessLayout.route-a.tsx | /route-a | <Root><PathlessLayout><RouteA> |
| ʦ _pathlessLayout.route-b.tsx | /route-b | <Root><PathlessLayout><RouteB> |
| ʦ files.$.tsx | /files/$ | <Root><Files> |
| ʦ account.tsx | /account | <Root><Account> |
| ʦ account.overview.tsx | /account/overview | <Root><Account><Overview> |
100% 的目录或扁平路由结构极不可能最适合您的项目,这就是为什么 TanStack Router 允许您将扁平路由和目录路由混合在一起,在合适的地方创建一个使用两全其美的路由树:
请参见下面的示例:
| Filename | Route Path | Component Output |
|---|---|---|
| ʦ __root.tsx | <Root> | |
| ʦ index.tsx | / (exact) | <Root><RootIndex> |
| ʦ about.tsx | /about | <Root><About> |
| ʦ posts.tsx | /posts | <Root><Posts> |
| 📂 posts | ||
| ┄ ʦ index.tsx | /posts (exact) | <Root><Posts><PostsIndex> |
| ┄ ʦ $postId.tsx | /posts/$postId | <Root><Posts><Post> |
| ┄ ʦ $postId.edit.tsx | /posts/$postId/edit | <Root><Posts><Post><EditPost> |
| ʦ settings.tsx | /settings | <Root><Settings> |
| ʦ settings.profile.tsx | /settings/profile | <Root><Settings><Profile> |
| ʦ settings.notifications.tsx | /settings/notifications | <Root><Settings><Notifications> |
| ʦ account.tsx | /account | <Root><Account> |
| ʦ account.overview.tsx | /account/overview | <Root><Account><Overview> |
扁平路由和目录路由都可以混合在一起,在合适的地方创建一个使用两全其美的路由树。
Tip
如果您发现默认的基于文件的路由结构不符合您的需求,您始终可以使用虚拟文件路由来控制路由的来源,同时仍然获得基于文件的路由的出色性能优势。
要开始使用基于文件的路由,您需要配置项目的打包器以使用 TanStack Router 插件或 TanStack Router CLI。
要启用基于文件的路由,您需要使用 React 和受支持的打包器。查看您的打包器是否在下面的配置指南中列出。
当通过受支持的打包器之一使用 TanStack Router 的基于文件的路由时,我们的插件将通过打包器的开发和构建过程自动生成您的路由配置。这是使用 TanStack Router 路由生成功能的最简单方法。
如果您的打包器尚未受支持,您可以在 Discord 或 GitHub 上联系我们告知。���那之前,不要担心!您仍然可以使用 @tanstack/router-cli 包来生成您的路由树文件。