Next App Router(上)

ops/2025/2/14 0:54:37/

目录

1. 文件系统(file-system)

2. 从 Pages Router 到 App Router

3. 使用 App Router

4. 定义页面(Pages)


路由(Router)是 Next.js 应用的重要组成部分。在 Next.js 中,路由决定了一个页面如何渲染或者一个请求该如何返回。

Next.js 有两套路由解决方案,之前的方案称之为“Pages Router”,目前的方案称之为“App Router”,两套方案目前是兼容的,都可以在 Next.js 中使用

1. 文件系统(file-system)

Next.js 的路由基于的是文件系统,也就是说,一个文件就可以是一个路由。举个例子,你在 pages 目录下创建一个 index.js 文件,它会直接映射到 / 路由地址:

javascript">// pages/index.js
import React from 'react'
export default () => <h1>Hello world</h1>

在 pages 目录下创建一个 about.js 文件,它会直接映射到 /about 路由地址:

javascript">// pages/about.js
import React from 'react'
export default () => <h1>About us</h1>

2. 从 Pages Router 到 App Router

现在你打开使用 create-next-app 创建的项目,你会发现默认并没有 pages 这个目录。查看 packages.json中的 Next.js 版本,如果版本号大于 13.4,那就对了!

Next.js 从 v13 起就使用了新的路由模式 —— App Router。之前的路由模式我们称之为“Pages Router”,为保持渐进式更新,依然存在。从 v13.4 起,App Router 正式进入稳定化阶段,App Router 功能更强、性能更好、代码组织更灵活,就让我们使用新的路由模式吧!

可是这俩到底有啥区别呢?Next.js 又为什么升级到 App Router 呢?知其然知其所以然,让我们简单追溯一下。以前我们声明一个路由,只用在 pages 目录下创建一个文件就可以了,以前的目录结构类似于:

javascript">└── pages├── index.js├── about.js└── more.js

这种方式有一个弊端,那就是 pages 目录的所有 js 文件都会被当成路由文件,这就导致比如组件不能写在 pages 目录下,这就不符合开发者的使用习惯。

升级为新的 App Router 后,现在的目录结构类似于:

javascript">src/
└── app├── page.js ├── layout.js├── template.js├── loading.js├── error.js└── not-found.js├── about│   └── page.js└── more└── page.js

使用新的模式后,你会发现 app 下多了很多文件。这些文件的名字并不是我乱起的,而是 Next.js 约定的一些特殊文件。从这些文件的名称中你也可以了解文件实现的功能,比如布局(layout.js)、模板(template.js)、加载状态(loading.js)、错误处理(error.js)、404(not-found.js)等。

简单的来说,App Router 制定了更加完善的规范,使代码更好被组织和管理。

3. 使用 App Router

首先是定义路由,文件夹被用来定义路由。每个文件夹都代表一个对应到 URL 片段的路由片段。创建嵌套的路由,只需要创建嵌套的文件夹。举个例子

下图的 app/dashboard/settings目录对应的路由地址就是 /dashboard/settings

4. 定义页面(Pages)

那如何保证这个路由可以被访问呢?你需要创建一个特殊的名为 page.js 的文件。至于为什么叫 page.js呢?除了 page 有“页面”这个含义之外,你可以理解为这是一种约定或者规范。(如果你是 Next.js 的开发者,你也可以约定为 index.js甚至 yayu.js!)

在上图这个例子中:

  • app/page.js 对应路由 /
  • app/dashboard/page.js 对应路由 /dashboard
  • app/dashboard/settings/page.js 对应路由/dashboard/settings
  • analytics 目录下因为没有 page.js 文件,所以没有对应的路由。这个文件可以被用于存放组件、样式表、图片或者其他文件。

当然不止 .js文件,Next.js 默认是支持 React、TypeScript 的,所以 .js.jsx.tsx 都是可以的。

那 page.js 的代码该如何写呢?最常见的是展示 UI,比如:

javascript">// app/page.js
export default function Page() {return <h1>Hello, Next.js!</h1>
}

访问 http://localhost:3000/,效果如下:


http://www.ppmy.cn/ops/8979.html

相关文章

C# 工具类

文章目录 Dns获取本机IP地址获取当前项目App.config文件下的value值将枚举值赋值到下拉文本框中读取Json文件JSON转换使用文件流的方式&#xff0c;向文档中添加数据将数据写入指定路径文件中检查文件是否存在&#xff0c;不存在时进行创建Json转换为对象 Dns获取本机IP地址 p…

C语言 语法

常用的排序算法&#xff08;4&#xff09;&#xff1a; 插入排序&#xff08;小数据基本有序&#xff09;&#xff0c;快速排序&#xff0c;归并排序&#xff08;大数据集&#xff09;&#xff0c;堆排序 冒泡排序和选择排序实际场景不会使用性能差 如何评估排序算法的性能&…

35. UE5 RPG制作火球术技能

接下来&#xff0c;我们将制作技能了&#xff0c;总算迈进了一大步。首先回顾一下之前是如何实现技能触发的&#xff0c;然后再进入正题。 如果想实现我之前的触发方式的&#xff0c;请看此栏目的31-33篇文章&#xff0c;讲解了实现逻辑&#xff0c;这里总结一下&#xff1a; …

node.js-模块化

定义&#xff1a;CommonJS模块是为Node.js打包Javascript代码的原始方式。Node.js还支持浏览器和其他Javascript运行时使用的ECMAScript模块标准。 在Node.js中&#xff0c;每个文件都被视为一个单独的模块。 概念&#xff1a;项目是由很多个模块文件组成的 好处&#xff1a…

极狐GitLab x LigaAI,AI 时代研发提效新范式

GitLab 是一个全球知名的一体化 DevOps 平台&#xff0c;很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab 是 GitLab 在中国的发行版&#xff0c;专门为中国程序员服务。可以一键式部署极狐GitLab。 近日&#xff0c;极狐GitLab 和 LigaAI 宣布合作&#xff0c;双…

JMeter--后置处理器--正则表达式提取器

正则表达式提取器&#xff08;Regular Expression Extractor&#xff09; 接口需要关联时&#xff0c;可以通过正则表达式提取所需要的值 右键 >>> 添加 >>> 后置处理器 >>> 正则表达式提取器&#xff08;Regular Expression Extractor&#xff0…

汽车研发项目进度管理的挑战与优化策略

随着汽车行业的快速发展和市场竞争的加剧&#xff0c;新车型研发项目的进度管理成为车企赢得市场的关键。然而&#xff0c;由于汽车研发项目通常具有投资大、周期长、技术难度高、参与方众多等特点&#xff0c;项目进度管理面临着诸多挑战。为了提升车型研发效率、缩短研发周期…

渐进时间复杂度O(n)

基本操作数 算法的运行速度受计算机性能的影响&#xff0c;所以通常考虑算法效率的不是算法运行的实际用时&#xff0c;而是算法运行所需要进行的基本操作的数量。 像加减乘除、访问变量、给变量赋值等都可以看作基本操作。对基本操作的计数或是估测可以作为评判算法用时的指标…