Skip to content

Next.js 动态路由

[param] 定义动态路由参数,匹配任意值的 URL 片段。

三种模式

模式目录名匹配
基本[id]/shop/123
多片段[...slug]/shop/123/456/789
可选[[...slug]]/shop/shop/123

目录结构

app/shop/
  [id]/page.tsx          → /shop/:id
  [...id]/page.tsx       → /shop/:id*(多段捕获)
  [[...id]]/page.tsx     → /shop 或 /shop/:id*(可选)

接受参数

tsx
'use client'
import { useParams } from 'next/navigation'

export default function ShopPage() {
  const params = useParams()
  // [id]      → { id: '123' }
  // [...id]    → { id: ['123', '456', '789'] }
  // [[...id]]  → {} 或 { id: ['123'] }
}

三种模式对比

/shop/123         → [id] ✓   [...id] ✓   [[...id]] ✓
/shop/123/456     → [id] ✗   [...id] ✓   [[...id]] ✓
/shop             → [id] ✗   [...id] ✗   [[...id]] ✓