Next.js--------路由

63 阅读2分钟

动态路由

1.1 [folderName]

使用动态路由,需要将文件夹的名字用方括号括住,比如 [id][slug]。这个路由的名字会作为 params prop 传给布局、 页面、 路由处理程序 以及 generateMetadata 函数。

🍐:在app/blog目录下新建一个名为[slug]的文件夹,在该文件夹新建一个page.js文件,代码如下

// app/blog/[slug]/page.js
export default function Page({params}){
  return <div> My post:{params.slug}</div>
}

效果如下:

截屏2025-03-12 19.05.35.png

  • 当访问/blog/a时。params的值为{slug:'a'}
  • 当访问/blog/hello时,params的值为{slug:'hello'}
  • 以此类推(如果[slug]换成其他的,如[id]等,则对应的params的值为{id:'xxx'})

1.2 [...folderName]---会捕获所有的路由片段

🍐: 在app/shop/[...slug]/page.js中

// app/shop/[...slug]/page.js
export default function Page({params}){
  return <div> My Shop:{JSON.stringify(params)}</div>
}

效果如下: 截屏2025-03-12 19.11.42.png

  • 当访问/shop/a时。params的值为{slug:['a']}
  • 当访问/shop/a/b时,params的值为{slug:['a','b']}
  • 当访问/shop/a/b/c时,params的值为{slug:['a','b','c']}
  • 以此类推

1.3[[...folderName]] 相当于是1和2的之和(包含[floaderName]和[...folderName])

🍐:

//app/shop/[[...slug]]/page.js
export default function Page({params}){
  return <div> My Shop:{JSON.stringify(params)}</div>
}

效果如下:

截屏2025-03-12 21.37.39.png

  • 当访问 /shop的时候,params 的值为 {}

  • 当访问 /shop/a的时候,params 的值为 { slug: ['a'] }

  • 当访问 /shop/a/b的时候,params 的值为 { slug: ['a', 'b'] }

  • 当访问 /shop/a/b/c的时候,params 的值为 { slug: ['a', 'b', 'c'] }

  • 以此类推。

路由组

在 app目录下,文件夹名称通常会被映射到 URL 中,但你可以将文件夹标记为路由组,阻止文件夹名称被映射到 URL 中。

**文件夹用括号括住**,例如:(shop)

截屏2025-03-12 21.41.32.png

平行路由

平行路由的使用方式是将文件夹以@作为开头进行命名。

截屏2025-03-12 21.44.59.png

平行路由的用途:

1.1 条件渲染
1.2 独立路由处理
1.3 子导航

拦截路由

在 Next.js 中,实现拦截路由需要你在命名文件夹的时候以 (..) 开头,其中:

  • (.) 表示匹配同一层级
  • (..) 表示匹配上一层级
  • (..)(..) 表示匹配上上层级。
  • (...) 表示匹配根目录