一文带你了解 Next Route 使用

简介: 一文带你了解 Next Route 使用

基本概念

在 Next.js 14 中,app 目录引入了一种新的文件系统路由方式,相比于传统的 pages 目录,这种方式更加灵活,支持更强大的布局和组件化能力。以下是详细的说明和示例。  

  • app 目录中,每个文件和文件夹都对应一个 URL 路径。Next.js 自动将文件系统结构映射为应用的路由,无需手动配置。  

定义页面路由

app/
  ├── page.js       -> "/"
  ├── about/
  │   └── page.js   -> "/about"
  └── blog/
      └── page.js   -> "/blog"
  • app/page.js 定义了根路径 / 的页面。
  • app/about/page.js 定义了 /about 路径的页面。
  • app/blog/page.js 定义了 /blog 路径的页面。

动态路由

app 目录中,通过方括号 [] 定义动态路由。  

app/
  └── blog/
      ├── [id]/
      │   └── page.js   -> "/blog/:id"
      └── page.js       -> "/blog"

app/blog/[id]/page.js 文件中,id 是一个动态参数,可以在页面组件中通过 useRouter 钩子获取

// app/blog/[id]/page.js
import { useRouter } from 'next/navigation';
export default function BlogPost() {
  const router = useRouter();
  const { id } = router.query;
  return (
    <div>
      <h1>Blog Post ID: {id}</h1>
    </div>
  );
}


嵌套路由 和 布局

app 目录支持嵌套路由和布局管理。通过在不同层级的文件夹中定义 layout.js,可以为该层级及其子路由提供共享的布局。  

app/
  ├── layout.js           -> 应用级别布局
  ├── about/
  │   └── layout.js       -> about 页面及其子页面的布局
  ├── blog/
  │   ├── layout.js       -> blog 页面及其子页面的布局
  │   ├── [id]/
  │   │   └── page.js     -> "/blog/:id"
  │   └── page.js         -> "/blog"
  └── page.js             -> 首页 "/"

/blog/blog/:id 页面将共享 app/blog/layout.js 中定义的布局。  

路由参数处理

通过useSearchParams 钩子来获取这些查询参数  

例如 url为  /search?q=nextjs

// app/search/page.js
import { useSearchParams } from 'next/navigation';
export default function SearchPage() {
  const searchParams = useSearchParams();
  const query = searchParams.get('q');
  return (
    <div>
      <h1>Search Query: {query}</h1>
    </div>
  );
}

捕获所有路由和可选捕获  

捕获所有路由:

定义一个捕获所有路由的页面,例如 /blog/[...slug] 对应的 app/blog/[...slug]/page.js 文件,它将匹配 /blog/a, /blog/a/b 等路径。

可选捕获路由:

使用 [[...slug]] 可以定义一个可选的捕获路由。如果没有匹配的段,路径会默认为 /blog

// app/blog/[[...slug]]/page.js
import { useRouter } from 'next/navigation';
export default function Blog() {
  const router = useRouter();
  const { slug } = router.query;
  if (!slug) {
    return <div>Blog Home Page</div>;
  }
  return <div>Blog Post: {slug.join('/')}</div>;
}
相关文章
|
设计模式 前端开发 数据可视化
【第4期】一文了解React UI 组件库
【第4期】一文了解React UI 组件库
761 0
|
11月前
|
网络架构
Next14 页面与布局 使用
Next14 页面与布局 使用
242 7
|
11月前
|
API 网络架构
一文带你了解 Flutter 路由
一文带你了解 Flutter 路由
377 5
|
11月前
一文带你封装Vue3 Echarts
一文带你封装Vue3 Echarts
1020 7
一文带你封装Vue3 Echarts
|
11月前
|
存储 资源调度 JavaScript
一文带你了解PNPM以及 npm,yarn,pnpm区别
一文带你了解PNPM以及 npm,yarn,pnpm区别
784 9
|
8月前
|
IDE 程序员 编译器
鸿蒙开发:ArkTs语言注释
关于注释,有一点需要注意,那就是,注释,不会被编译器或解释器执行,而本小节的重点并不是简单的教大家注释如何去写,而是在实际的项目中,我们能够真正的把注释投入到实际的开发中。
266 18
鸿蒙开发:ArkTs语言注释
|
11月前
|
算法
基于Adaboost模型的数据预测和分类matlab仿真
AdaBoost(Adaptive Boosting)是一种由Yoav Freund和Robert Schapire于1995年提出的集成学习方法,旨在通过迭代训练多个弱分类器并赋予分类效果好的弱分类器更高权重,最终构建一个强分类器。该方法通过逐步调整样本权重,使算法更关注前一轮中被误分类的样本,从而逐步优化模型。示例代码在MATLAB 2022A版本中运行,展示了随着弱分类器数量增加,分类错误率的变化及测试数据的分类结果。
465 13
|
9月前
|
移动开发 前端开发 UED
React 音频预览组件:Audio Preview
本文介绍如何使用 React 构建音频预览组件,涵盖基础实现、常见问题及解决方案。通过 HTML5 `&lt;audio&gt;` 标签和 React 状态管理,实现播放控制。解决文件路径、浏览器兼容性等问题,并优化性能,避免状态不同步和内存泄漏,提升用户体验。
222 22
|
11月前
|
数据采集 前端开发 JavaScript
Next14 Server Components 和 Client Components 的区别
Next14 Server Components 和 Client Components 的区别
270 8
|
11月前
|
前端开发 JavaScript 搜索推荐
一文 Next / React / SSR / SSG / CSR 扫盲
一文 Next / React / SSR / SSG / CSR 扫盲
451 6