路由基础
每个应用程序的骨架都是路由。此页面将向您介绍 Web 路由的**基本概念**以及如何在 Next.js 中处理路由。
术语
首先,您会看到这些术语在整个文档中使用。这是一个快速参考
- 树:一种用于可视化层次结构的约定。例如,具有父组件和子组件的组件树、文件夹结构等。
- 子树:树的一部分,从一个新的根(第一个)开始,到叶子(最后一个)结束。
- 根:树或子树中的第一个节点,例如根布局。
- 叶:子树中没有子节点的节点,例如 URL 路径中的最后一个段。
- URL 段:URL 路径中由斜杠分隔的部分。
- URL 路径:URL 中在域名之后的部分(由段组成)。
app
路由器
在版本 13 中,Next.js 引入了一个新的**App 路由器**,它构建在React 服务器组件之上,支持共享布局、嵌套路由、加载状态、错误处理等。
App 路由器在一个名为app
的新目录中工作。app
目录与pages
目录一起工作,以允许增量采用。这允许您将应用程序的某些路由选择到新的行为,同时将其他路由保留在pages
目录中以获得以前的行为。如果您的应用程序使用pages
目录,请参阅页面路由器文档。
**注意:**App 路由器优先于页面路由器。跨目录的路由不应解析到相同的 URL 路径,否则会导致构建时错误以防止冲突。
默认情况下,app
内的组件是React 服务器组件。这是一个性能优化,可以让您轻松地采用它们,您也可以使用客户端组件。
建议:**如果您不熟悉服务器组件,请查看服务器页面。
文件夹和文件的作用
Next.js 使用基于文件系统的路由器,其中
- 文件夹**用于定义路由。路由是嵌套文件夹的单个路径,遵循从**根文件夹**到包含
page.js
文件的最终**叶文件夹**的文件系统层次结构。请参阅定义路由。 - 文件**用于创建显示路由段的 UI。请参阅特殊文件。
路由段
路由中的每个文件夹都表示一个**路由段**。每个路由段都映射到**URL 路径**中相应的**段**。
嵌套路由
要创建嵌套路由,您可以将文件夹彼此嵌套。例如,您可以通过在app
目录中嵌套两个新文件夹来添加一个新的/dashboard/settings
路由。
/dashboard/settings
路由由三个段组成
/
(根段)dashboard
(段)settings
(叶段)
文件约定
Next.js 提供了一组特殊文件,用于在嵌套路由中创建具有特定行为的 UI。
layout | 某个路由段及其子路由的共享 UI。 |
page | 路由的唯一 UI,并使路由公开访问。 |
loading | 某个路由段及其子路由的加载 UI。 |
not-found | 某个路由段及其子路由的未找到 UI。 |
error | 某个路由段及其子路由的错误 UI。 |
global-error | 全局错误 UI。 |
route | 服务器端 API 端点。 |
template | 专门重新渲染的 Layout UI。 |
default | 用于并行路由的回退 UI。 |
注意:特殊文件可以使用
.js
、.jsx
或.tsx
文件扩展名。
组件层次结构
在路由段的特殊文件中定义的 React 组件按照特定的层次结构呈现。
layout.js
template.js
error.js
(React 错误边界)loading.js
(React 悬念边界)not-found.js
(React 错误边界)page.js
或嵌套的layout.js
在嵌套路由中,某个路由段的组件将嵌套在其父路由段的组件内部。
同处位置
除了特殊文件之外,您还可以选择将自己的文件(例如组件、样式、测试等)同处放置在 app
目录中的文件夹中。
这是因为,虽然文件夹定义了路由,但只有 page.js
或 route.js
返回的内容才是可公开访问的。
详细了解项目组织和同处位置。
高级路由模式
App Router 还提供了一组约定,以帮助您实现更高级的路由模式。这些包括
- 并行路由:允许您在同一视图中同时显示两个或多个页面,并且可以独立导航。您可以将它们用于具有自己子导航的拆分视图。例如:仪表盘。
- 拦截路由:允许您拦截路由并在另一个路由的上下文中显示它。当保持当前页面的上下文很重要时,您可以使用这些路由。例如:在编辑一个任务时查看所有任务,或在提要中展开照片。
这些模式允许您构建更丰富、更复杂的 UI,使小型团队和独立开发人员能够轻松实现以往复杂的功能。
后续步骤
现在您已经了解了 Next.js 中路由的基础知识,请按照以下链接创建您的第一个路由。
定义路由
页面
布局和模板
链接和导航
错误处理
加载 UI 和流式传输
重定向
路由组
项目组织
动态路由
并行路由
拦截路由
路由处理程序
中间件
国际化
这对您有帮助吗?