跳至内容

路由基础

每个应用程序的骨架都是路由。此页面将向您介绍 Web 路由的**基本概念**以及如何在 Next.js 中处理路由。

术语

首先,您会看到这些术语在整个文档中使用。这是一个快速参考

Terminology for Component Tree
  • 树:一种用于可视化层次结构的约定。例如,具有父组件和子组件的组件树、文件夹结构等。
  • 子树:树的一部分,从一个新的根(第一个)开始,到叶子(最后一个)结束。
  • 根:树或子树中的第一个节点,例如根布局。
  • 叶:子树中没有子节点的节点,例如 URL 路径中的最后一个段。
Terminology for URL Anatomy
  • URL 段:URL 路径中由斜杠分隔的部分。
  • URL 路径:URL 中在域名之后的部分(由段组成)。

app 路由器

在版本 13 中,Next.js 引入了一个新的**App 路由器**,它构建在React 服务器组件之上,支持共享布局、嵌套路由、加载状态、错误处理等。

App 路由器在一个名为app的新目录中工作。app目录与pages目录一起工作,以允许增量采用。这允许您将应用程序的某些路由选择到新的行为,同时将其他路由保留在pages目录中以获得以前的行为。如果您的应用程序使用pages目录,请参阅页面路由器文档。

**注意:**App 路由器优先于页面路由器。跨目录的路由不应解析到相同的 URL 路径,否则会导致构建时错误以防止冲突。

Next.js App Directory

默认情况下,app内的组件是React 服务器组件。这是一个性能优化,可以让您轻松地采用它们,您也可以使用客户端组件

建议:**如果您不熟悉服务器组件,请查看服务器页面。

文件夹和文件的作用

Next.js 使用基于文件系统的路由器,其中

  • 文件夹**用于定义路由。路由是嵌套文件夹的单个路径,遵循从**根文件夹**到包含page.js文件的最终**叶文件夹**的文件系统层次结构。请参阅定义路由
  • 文件**用于创建显示路由段的 UI。请参阅特殊文件

路由段

路由中的每个文件夹都表示一个**路由段**。每个路由段都映射到**URL 路径**中相应的**段**。

How Route Segments Map to URL Segments

嵌套路由

要创建嵌套路由,您可以将文件夹彼此嵌套。例如,您可以通过在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
Component Hierarchy for File Conventions

在嵌套路由中,某个路由段的组件将嵌套在其父路由段的组件内部

Nested File Conventions Component Hierarchy

同处位置

除了特殊文件之外,您还可以选择将自己的文件(例如组件、样式、测试等)同处放置在 app 目录中的文件夹中。

这是因为,虽然文件夹定义了路由,但只有 page.jsroute.js 返回的内容才是可公开访问的。

An example folder structure with colocated files

详细了解项目组织和同处位置

高级路由模式

App Router 还提供了一组约定,以帮助您实现更高级的路由模式。这些包括

  • 并行路由:允许您在同一视图中同时显示两个或多个页面,并且可以独立导航。您可以将它们用于具有自己子导航的拆分视图。例如:仪表盘。
  • 拦截路由:允许您拦截路由并在另一个路由的上下文中显示它。当保持当前页面的上下文很重要时,您可以使用这些路由。例如:在编辑一个任务时查看所有任务,或在提要中展开照片。

这些模式允许您构建更丰富、更复杂的 UI,使小型团队和独立开发人员能够轻松实现以往复杂的功能。

后续步骤

现在您已经了解了 Next.js 中路由的基础知识,请按照以下链接创建您的第一个路由。