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

Next.js 13 App目录下如何获取页面slug?解决原写法报错问题

Next.js 13 App目录下获取页面slug的方法

Next.js 13 的 App Router 完全重构了数据获取逻辑,不再支持 getStaticProps 这类 Pages Router 中的 API,这也是你之前写法报错的原因。以下是不同场景下获取页面 slug 的具体实现方式:

服务器组件中获取slug

如果你的页面组件是服务器组件(默认就是服务器组件,无需额外标记),且路由为动态路由(比如 app/[slug]/page.js),可以直接通过组件的 params 参数拿到 slug:

// app/[slug]/page.js
export default async function Page({ params }) {
  // 直接从params中提取slug
  const slug = params.slug;
  
  // 示例:用slug请求对应数据
  const postData = await fetch(`https://your-api-domain/posts/${slug}`).then(res => res.json());
  
  return (
    <div>
      <h1>{postData.title}</h1>
      <p>{postData.content}</p>
    </div>
  );
}

静态预渲染时生成路径(替代getStaticPaths)

如果需要静态预渲染所有动态路由页面,需在同路由目录下创建 generateStaticParams.js 文件,返回所有可能的 slug 列表:

// app/[slug]/generateStaticParams.js
export async function generateStaticParams() {
  // 从API或数据库获取所有需要预渲染的slug
  const allPosts = await fetch('https://your-api-domain/posts').then(res => res.json());
  
  return allPosts.map(post => ({
    slug: post.slug,
  }));
}

客户端组件中获取slug

如果是客户端组件(需添加 'use client' 指令),可以使用 next/navigation 提供的 useParams 钩子:

// app/[slug]/ClientComponent.js
'use client';

import { useParams } from 'next/navigation';

export default function ClientComponent() {
  const params = useParams();
  const slug = params.slug;
  
  return <div>当前页面的slug:{slug}</div>;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 13:41:26