当前位置:首页 > 前端开发 > 正文内容

Next.js 中为什么 App Router 可能是未来,但 Pages Router 依然重要?

邻居的猫1个月前 (12-09)前端开发315

Next.js 作为一个强壮的 React 结构,为开发者供给了两种路由体系:App Router 和 Pages Router。这两种路由体系各有特色,适用于不同的场景。本文将深入探讨这两种路由体系的差异、优缺陷和运用场景,协助你做出最佳挑选。

App Router:新一代的路由革新

App Router 是 Next.js 13 引进的新路由体系,它运用 app 目录来安排路由,带来了许多令人兴奋的新特性。

长处:

  1. React 服务器组件支撑:这是一个游戏规则改动者,答应在服务器端烘托杂乱组件,大大提高了功能。

  2. 灵敏的布局体系:经过嵌套布局,你可以更简略地创立杂乱的页面结构。

  3. 内置加载 UI 和错误处理:供给了更好的用户体会,无需额定装备。

  4. 功能优化:得益于服务器组件和其他优化,App Router 一般能供给更好的功能。

  5. 并行路由:答应在同一布局中一起烘托多个页面。

缺陷:

  1. 学习曲线较陡:关于习惯了传统 React 开发的人来说,或许需求一些时刻来习惯。

  2. 第三方库兼容性:一些老旧的库或许不兼容新的服务器组件形式。

  3. 仍在发展中:作为较新的技能,或许会有一些不知道的问题或改变。

Pages Router:经典牢靠的挑选

Pages Router 是 Next.js 的传统路由体系,运用 pages 目录来安排路由。它仍然是许多项目的首选,特别是关于较老的 Next.js 版别。

长处:

  1. 简略易上手:关于初学者来说,学习曲线相对陡峭。

  2. 文件体系路由直观:路由结构与文件结构一一对应,易于了解和办理。

  3. 丰厚的社区资源:由于运用时刻较长,有很多的教程、示例和第三方库支撑。

  4. 安稳性高:经过多年的运用和优化,bug 较少,体现安稳。

缺陷:

  1. 不支撑 React 服务器组件:无法运用这一新特性带来的功能提高。

  2. 布局体系相对简略:完成杂乱布局或许需求更多的代码和装备。

  3. 数据获取办法较为固定:首要依靠 getServerSidePropsgetStaticProps,灵敏性较低。

实战比照:博客页面完成

让咱们经过一个简略的博客页面来比照这两种路由体系的完成方法:

Pages Router 完成

// pages/posts/[id].js
import { useRouter } from 'next/router';

export default function Post({ post }) {
    const router = useRouter();

    if (router.isFallback) {
        return <div>Loading...</div>;
    }

    return (
        <div>
            <h1>{post.title}</h1>
            <p>{post.content}</p>
        </div>
    );
}

export async function getStaticProps({ params }) {
    const res = await fetch(`https://api.example.com/posts/${params.id}`);
    const post = await res.json();
    return { props: { post } };
}

export async function getStaticPaths() {
    const res = await fetch('https://api.example.com/posts');
    const posts = await res.json();

    const paths = posts.map(post => ({
        params: { id: post.id.toString() },
    }));

    return { paths, fallback: true };
}

在这个比如中,咱们运用 getStaticPropsgetStaticPaths 来完成静态生成。这是 Pages Router 的典型用法,合适内容不常常改变的博客文章。

App Router 完成

// app/posts/[id]/page.js
import { notFound } from 'next/navigation';

async function getPost(id) {
    const res = await fetch(`https://api.example.com/posts/${id}`);
    if (!res.ok) return undefined;
    return res.json();
}

export default async function Post({ params }) {
    const post = await getPost(params.id);

    if (!post) {
        notFound();
    }

    return (
        <div>
            <h1>{post.title}</h1>
            <p>{post.content}</p>
        </div>
    );
}

App Router 的完成愈加简练。这儿咱们直接在组件中进行异步数据获取,这得益于 React 服务器组件的支撑。一起,咱们运用 notFound 函数来处理文章不存在的状况,这是 App Router 供给的内置错误处理机制之一。

怎么挑选?

挑选 App Router 仍是 Pages Router,没有肯定的对错。以下是一些主张:

  1. 项目规划和杂乱度:关于大型、杂乱的项目,App Router 的灵敏性和功能优势或许更有吸引力。

  2. 团队了解度:假如团队对 Next.js 较为生疏,或许从 Pages Router 开端更简略上手。

  3. 功能需求:假如项目对功能有较高要求,App Router 的服务器组件或许是更好的挑选。

  4. 项目时刻线:关于需求快速开发的项目,Pages Router 或许更合适,由于学习本钱较低。

  5. 未来展望:考虑到 Next.js 的发展方向,长时刻来看,把握 App Router 或许更有优势。

个人经历共享

作为一个初运用 Next.js 的开发者,我开端对 App Router 也感到困惑。可是,当我开端处理杂乱的布局和需求优化功能的场景时,App Router 的优势就显现出来了。

例如,在一个需求频频更新的数据密集型运用中,App Router 的服务器组件让我可以在服务器端处理大部分数据逻辑,明显减少了传输到客户端的 JavaScript 数量,提高了运用的全体功能。

但是,关于一些简略的项目或许时刻急迫的状况,我仍然会挑选 Pages Router。它简略直接,能让我快速建立原型并上线。

定论

App Router 和 Pages Router 各有千秋,挑选哪一个取决于你的详细需求和场景。

我的主张是:不要惧怕测验新事物。即便你现在运用的是 Pages Router,也值得花些时刻了解 App Router。

究竟,技能在不断进步,坚持学习才干不被筛选。

记住,技能仅仅东西,真实重要的是解决问题和发明价值。挑选最合适你的东西,才干事半功倍。

结语

前次写了一个用于批量整理无用库房的东西,假如感兴趣那就去看看 😊

介绍文章: https://mp.weixin.qq.com/s/t7lgc6b7xJiNhfm5vWo5-A

GitHub 库房地址: https://github.com/yaolifeng0629/del-repos

假如你觉得这个东西对你有所协助,请不要忘掉给我的 GitHub 库房点个 Star!你的支撑是我行进的动力!

感谢阅览,咱们下次再会!

扫描二维码推送至手机访问。

版权声明:本文由51Blog发布,如需转载请注明出处。

本文链接:https://www.51blog.vip/?id=447

分享给朋友:

“Next.js 中为什么 App Router 可能是未来,但 Pages Router 依然重要?” 的相关文章

vue生命周期, 什么是 Vue.js 生命周期?

vue生命周期, 什么是 Vue.js 生命周期?

Vue的生命周期是指一个Vue实例从创建到销毁的整个过程。这个过程可以分为多个阶段,每个阶段都有特定的钩子函数(钩子函数就是生命周期函数),允许我们在特定的时间点执行特定的操作。Vue的生命周期大致可以分为以下几个阶段:1. 初始化阶段:在这个阶段,Vue实例被创建,并且开始进行数据的初始化。这个阶...

css中字体加粗, 什么是字体加粗?

css中字体加粗, 什么是字体加粗?

`normal`:默认值,正常字体 `bold`:加粗字体 `bolder`:比`bold`更粗 `lighter`:比`normal`更细 `100` `900`:数值表示,100最细,900最粗例如,如果你想将一个元素的字体加粗,你可以这样写:```cssp { fontweight: b...

vue绑定点击事件, 基本用法

vue绑定点击事件, 基本用法

在Vue中,绑定点击事件通常使用`von`或其简写`@`。以下是一个简单的例子,展示了如何在Vue组件中绑定点击事件:```html 点击我export default { methods: { handleClick { alert; } }}```在这个例子中,我们创...

vue文档, 什么是 Vue.js?

vue文档, 什么是 Vue.js?

1. Vue.js官方文档: :这是Vue.js的官方文档,包含了Vue.js的基本概念、安装方法、教程、指南等。文档内容丰富,适合不同层次的开发者学习。 :介绍了如何使用Vue.js创建单页应用,包括使用createvue脚手架工具、Vite构建设置、单文件组件、组合式API等。2....

html网站制作,```html            我的网站                欢迎来到我的网站                            首页            关于            联系                                    这是主要内容区域            这里可以添加文本、图片、视频等内容

html网站制作,```html 我的网站 欢迎来到我的网站 首页 关于 联系 这是主要内容区域 这里可以添加文本、图片、视频等内容

制作一个HTML网站涉及多个步骤,包括规划网站结构、设计页面布局、编写HTML代码、添加CSS样式、测试和部署网站等。以下是一个基本的HTML网站制作指南: 1. 规划网站结构 确定网站的目的和目标受众。 设计网站导航和页面布局。 列出所有需要创建的页面。 2. 设计页面布局 使用设计工具(如Ado...

html题目,搜索引擎优化(SEO)在HTML标题中的应用与重要性

html题目,搜索引擎优化(SEO)在HTML标题中的应用与重要性

请提供具体的 HTML 题目,我会尽力帮助你解答。搜索引擎优化(SEO)在HTML标题中的应用与重要性一、HTML标题的定义与作用二、HTML标题在SEO中的应用1. 提高搜索引擎排名搜索引擎会根据HTML标题中的关键词对网页进行排序,因此,合理设置HTML标题可以显著提高网站在搜索引擎中的排名。关...