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支持每个子路由都拥有自己的布局,从而实现更灵活的布局效果。没有设置布局的路由会延用父路由的布局

### Next.js App Router 功能概述 Next.jsApp Router 提供了一种更灵活且强大的路由管理方式[^1]。通过引入文件系统的路由定义方法,开发者可以更加直观地构建应用结构。 #### 文件系统路由 在 `app` 目录下创建页面文件即可自动映射到对应的 URL 路径。例如,在 `app/about/page.tsx` 中编写的内容会响应 `/about` 请求。 #### 嵌套路由布局 App Router 支持嵌套的 layout 组件来共享页面间的公共 UI 结构。这意味着可以在父级目录设置一次导航栏或侧边栏,子页面继承这些组件而无需重复声明。 ```jsx // app/layout.jsx export default function Layout({ children }) { return ( <> <header>Header</header> {children} <footer>Footer</footer> </> ); } // app/home/page.jsx import React from 'react'; const HomePage = () => { return <div>Welcome to Home Page!</div>; }; export default HomePage; ``` #### 并行路由 (Parallel Routes) 允许不同分支下的页面并行加载而不互相干扰。这对于实现复杂的多视图或多面板界面非常有用。 #### 国际化支持 借助第三方库如 `next-i18n-router` 可以为基于 App Router 构建的应用程序轻松添加国际化能力[^2]。此插件提供了简便的方法来进行语言环境检测以及路径前缀处理等功能。 #### API 路由 同样适用于 API 端点开发,只需按照约定放置 `.ts` 或 `.js` 文件于相应位置就能快速搭建 RESTful 接口服务。 ```typescript // app/api/hello/route.ts import { NextResponse } from 'next/server' export async function GET() { return NextResponse.json({ message: 'Hello, world!' }) } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值