You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Next.js如何实现页面名前加动态路由段并获取对应slug值

Next.js实现路径前缀动态字段方案

根据你使用的Next.js路由模式不同,对应实现方式如下:


1. Pages Router 实现方式

第一步:调整文件结构

在pages目录下新建名为[bandSlug]的动态文件夹,将原本的about.tsx、music.tsx移入该文件夹中,最终结构:

pages/
└── [bandSlug]/
    ├── about.tsx
    └── music.tsx

第二步:获取动态乐队slug

在页面组件中通过useRouter钩子即可拿到路径中的动态值,示例代码(以about.tsx为例):

import { useRouter } from 'next/router'

export default function AboutPage() {
  const router = useRouter()
  const { bandSlug } = router.query

  return <div>当前乐队:{bandSlug} 的关于页面</div>
}

配置完成后即可直接通过/nirvana/about、/metalica/music这类路径访问,完全匹配需求。


2. App Router(Next.js 13+ 推荐)实现方式

第一步:调整文件结构

在app目录下新建名为[bandSlug]的动态文件夹,在文件夹内分别创建about、music路由目录并添加对应的page.tsx,最终结构:

app/
└── [bandSlug]/
    ├── about/
    │   └── page.tsx
    └── music/
        └── page.tsx

第二步:获取动态乐队slug

App Router会自动将动态参数注入到页面组件的props中,直接读取即可,示例代码(以about/page.tsx为例):

export default function AboutPage({ params }: { params: { bandSlug: string } }) {
  const bandSlug = params.bandSlug
  return <div>当前乐队:{bandSlug} 的关于页面</div>
}

补充:静态生成(SSG)场景配置

如果你使用静态生成模式,需要提前声明所有可用的乐队slug值:

  • Pages Router 中在页面文件内添加getStaticPaths方法:
export async function getStaticPaths() {
  // 可从数据源读取全量乐队slug
  const paths = [
    { params: { bandSlug: 'nirvana' } },
    { params: { bandSlug: 'metalica' } },
  ]
  return { paths, fallback: false }
}
  • App Router 中在页面文件内添加generateStaticParams方法:
export async function generateStaticParams() {
  // 可从数据源读取全量乐队slug
  return [
    { bandSlug: 'nirvana' },
    { bandSlug: 'metalica' },
  ]
}

内容的提问来源于stack exchange,提问作者user1361389

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 16:09:01