app Router VS pages Router(Next.js学习笔记)

前言

本片文章主要对Next.js框架中的路由系统进行介绍,读者需要具备一定的JavaScript和react基础。相信通过本篇文章你会对Next.js框架的路由系统有更深的理解。

路由规则

app Router规则
  • app Router按照文件夹名称构建路由
  • 约定每一个路由下面必须有page.js文件
  • layout.js文件用于定制布局,如果没有这个文件和父级路由的布局相同,通过layout.js文件可实现嵌套布局
  • 动态路由参数约定文件夹名称params,在该动态路由文件夹page.js文件中通过params参数获取
  • 约定@filename文件夹时插槽文件,不生成路由,一般用于实现平行路由
pages Router规则
  • pages Router按照js文件名字构建路由,每一个js组件文件都是一个路由
  • 通过getStaticProps,getServerSideProps,getStaticPaths获取数据
总结

app Router基于文件夹命名构建路由,pages Router基于每一个js文件构建路由。因此pages Router的路由更加自由,学习成本也相对较小。

客户端和服务端组件(Client and server components)

客户端组件:
  • 浏览器API
  • 事件监听器
  • 所有 React 钩子
  • 非常适合在客户端生成一堆 HTML
服务器组件:
  • 非常适合隐藏代码和秘密
  • 不要传送大部分依赖项
  • 直接访问后台
  • 完全集成服务器操作
  • 有利于seo
总结

客户端组件和服务器组件是app Router独有的。顾名思义,客户端组件运行在浏览器环境中,可用于dom操作;服务器组件运行在node.js环境中,可访问系统级api,多用于服务端渲染(SSR)。Next.js默认使用服务器组件,如果要使用客户端组件需要在文件开头显示声明("use Client")。

布局更简单

我已经提到了layout.js 文件,它可以位于每个路径的目录中。 该组件使布局变得简单,因为路径组件会自动应用于提供的布局。 让我们看一个例子。

在我们选择的路径目录中,我们创建一个 layout.js:

复制代码
// layout.js

export default function LoginLayout({ children }) {
  return <div className='login-area'>{children}</div>
}

它所需要做的就是渲染一个自动传递的子组件 - 该子组件是 page.js 组件。

page.js 完全取决于我们。 由于布局是自动应用的,因此我们不需要在此文件中指定引用任何内容。

总结

app Router支持每个子路由都拥有自己的布局,从而实现更灵活的布局效果。没有设置布局的路由会延用父路由的布局

相关推荐
程序员黑豆15 小时前
Java 注释详解:单行、多行与文档注释的完整指南
java·前端·ai编程
剪刀石头布啊15 小时前
antd中可编辑表格中巧用useWatch实现联动高性能效果,以及定制延伸学习
前端
油丶酸萝卜别吃16 小时前
前端转全栈学习路线
前端·学习
浮生望16 小时前
前端路由进阶:History API原理与手写HistoryRouter
前端
陆枫Larry17 小时前
JavaScript 中的竞态是什么,为啥会有竟态?
前端
上海安当技术19 小时前
半天接入:USBKey RESTful API + C 动态库,Web 和 C/S 两套集成路径实战
前端·后端·restful·集成·usbkey
DevUI团队19 小时前
从“即兴创作”到“规格先行”,华为云码道(CodeArts)代码智能体持续深耕企业级规范驱动开发能力
前端·人工智能·后端
weixin_4316004420 小时前
NestJS 入门(3):Guard 如何挡住未登录请求?
前端·后端·学习·nest.js
avi911120 小时前
[AI教做人]AI平台做2项目;一个3D模型展示,另一个框架多人
javascript·人工智能·ai·3d模型·3d引擎·顶点和法线
kyriewen20 小时前
我用Claude Code两天干完了团队两周的排期——周报发出去那一刻我就后悔了
前端·javascript·ai编程