路由实现
在 Next.js 中,路由是通过文件系统实现的,每个文件夹代表一个路由段,文件夹中的页面文件则对应着具体的路由。
在 Next.js 版本13中还引入了新的 App Router,它基于 React Server Components 构建,支持共享布局、嵌套路由、加载状态、错误处理等功能。
App Router 允许你在 app
目录下定义路由,与 pages
目录一起工作,允许增量采用新的行为。这使你可以将应用程序的某些路由选择为新行为,同时保留 pages
目录中的其他路由以前的行为。
文件目录
├── app // App Router
│ └── page.tsx
│ └── layout.tsx
├── pages // Pages Router
│ └── index.mdx
├── public // 静态资源
│ └── favicon.ico
├── src // 可选的 src 文件夹
│ └── index.tsx
├── next.config.js // Next.js 配置文件
├── jsconfig.json // JavaScript 配置文件
├── tsconfig.json // TypeScript 配置文件
├── postcss.config.js // Tailwind CSS 配置文件
├── .next-env.d.ts // Next.js TypeScript 声明文件
├── .gitignore // Git 忽略配置文件
├── .eslintrc.json // ESLint 配置文件
├── .env.development // 开发环境变量
├── .env.local // 本地环境变 量
├── .env.production // 生产环境变量
├── .env // 环境变量
├── middleware.ts // Next.js 请求中间件
├── instrumentation.ts // OpenTelemetry and Instrumentation file
├── package.json // 项目依赖和脚本
路由
路由文件
file name | suffix | introduction |
---|---|---|
layout | .js .jsx .tsx | 布局 |
page | .js .jsx .tsx | 页面 |
loading | .js .jsx .tsx | 加载页面 |
not-found | .js .jsx .tsx | 404 页面 |
error | .js .jsx .tsx | 错误 页面 |
global-error | .js .jsx .tsx | 全局 页面 |
route | .js .ts | API endpoint |
template | .js .jsx .tsx | 重新渲染的布局 |
default | .js .jsx .tsx | 并行路由回退页面 |
嵌套路由
folder | 路由段 |
folder/folder | 嵌套路由段 |
动态路由
[folder] | 动态路由段 |
[...folder] | 全匹配路由段 |
[[...folder]] | 可选全匹配路由段 |
路由分组和私有文件夹
(folder) | 对路由进行分组而不影响路由本身 |
_folder | 将文件夹和所有子段标记为私有的,不参与路由匹配 |
并行和拦截路由
@folder | 命名插槽 |
(.)folder | 拦截同级路由 |
(..)folder | 拦截上一级路由 |
(..)(..)folder | 拦截上两级路由 |
(...)folder | 从根路由开始拦截 |