一文带你了解 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>;
}
相关文章
|
2月前
|
设计模式 人工智能 测试技术
万字长文:如何用 harness 的理念设计一个 AI 驱动的 UI 自动化工程。
Harness 是一种多 Agent 协作的设计模式,用“马具”比喻为 AI 工作流装上角色边界、状态机、产物契约与护栏规则四重约束,解决单 Agent 易跑偏、跳步、越权等问题。本文以 UI 自动化测试为例,手把手教你从零设计总控层、编写三类 Agent Prompt,并实现稳定可靠的 AI 测试生成闭环。
|
3月前
|
人工智能 编解码 API
AI视频生成低至0.9元/秒!阿里云HappyHorse开启灰度测试,150亿参数AI视频模型
阿里云HappyHorse(快乐小马)是阿里巴巴ATH创新事业部研发的150亿参数原生多模态AI视频大模型,全球首个实现音画联合生成的单流架构模型,4月登顶Artificial Analysis双榜。支持文/图生视频、1080P输出、7语种口型同步,最低0.44元/秒,已通过百炼平台、官网及千问App开放灰度测试。
|
监控 API 开发工具
HarmonyOS Next的HiLog日志系统完全指南:从入门到精通
本文深入解析HarmonyOS Next的HiLog日志系统,涵盖日志级别、核心API、隐私保护与高级回调功能,助你从入门到精通掌握这一重要开发工具。
|
人工智能 C++ iOS开发
ollama + qwen2.5-coder + VS Code + Continue 实现本地AI 辅助写代码
本文介绍在Apple M4 MacOS环境下搭建Ollama和qwen2.5-coder模型的过程。首先通过官网或Brew安装Ollama,然后下载qwen2.5-coder模型,可通过终端命令`ollama run qwen2.5-coder`启动模型进行测试。最后,在VS Code中安装Continue插件,并配置qwen2.5-coder模型用于代码开发辅助。
30811 71
|
前端开发 API 数据库
Next 编写接口api
Next 编写接口api
926 3
|
8月前
|
机器学习/深度学习 人工智能 前端开发
终端里的 AI 编程助手:OpenCode 使用指南
OpenCode 是开源的终端 AI 编码助手,支持 Claude、GPT-4 等模型,可在命令行完成代码编写、Bug 修复、项目重构。提供原生终端界面和上下文感知能力,适合全栈开发者和终端用户使用。
57114 11
|
存储 网络架构
Next.js 实战 (四):i18n 国际化的最优方案实践
这篇文章介绍了Next.js国际化方案,作者对比了网上常见的方案并提出了自己的需求:不破坏应用程序的目录结构和路由。文章推荐使用next-intl库来实现国际化,并提供了详细的安装步骤和代码示例。作者实现了国际化切换时不改变路由,并把当前语言的key存储到浏览器cookie中,使得刷新浏览器后语言不会失效。最后,文章总结了这种国际化方案的优势,并提供Github仓库链接供读者参考。
1197 0
Next.js 实战 (四):i18n 国际化的最优方案实践
|
缓存 前端开发 JavaScript
前端优化之路:打包文件拆包、增加哈希值
前面对项目打包做了优化处理,但是还不够完美,有两点可继续优化。
|
前端开发 JavaScript 定位技术
React 地图组件 Mapbox 入门指南
Mapbox 是一个强大的地图平台,提供丰富的地图数据和工具,支持多种开发语言和框架。本文介绍如何在 React 项目中使用 Mapbox,涵盖基础概念、安装配置、基本用法、常见问题及解决方法、高级用法等内容,并通过代码示例详细说明,帮助开发者提升地图应用的开发效率和用户体验。
923 2