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

新手求教:Next.js 13中generateStaticParams()函数基础解析

理解Next.js 13的generateStaticParams()函数

基础概念

generateStaticParams() 是Next.js App Router里的服务器端专属函数,只在项目构建阶段(或者开启增量静态再生时的更新阶段)运行,核心作用就是给你的动态路由生成对应的静态参数,让Next.js提前把动态页面变成静态HTML文件。

核心功能&用途

简单说,它就是帮你把动态路由(比如app/posts/[id]/page.js这种带方括号的路由)在构建网站的时候,就批量生成好所有可能的静态页面,而不是等用户访问时才临时生成。

举个实际场景:你有10篇博客,用[slug]作为动态路由段,通过generateStaticParams()返回这10篇博客的slug列表,Next.js在构建时就会自动生成/posts/my-first-blog、/posts/nextjs-guide...这10个静态页面。用户访问这些页面时,直接拿预渲染好的HTML,速度快、SEO友好,服务器也不用额外处理请求。

官方文档核心内容翻译

generateStaticParams() 是Next.js App Router中的服务器函数,用于在构建阶段为动态路由生成静态参数。当使用动态路由(如app/[id]/page.js)时,该函数返回的参数会被用于预渲染多个静态页面。

关键特性:

  • 仅在构建阶段运行(启用增量静态再生时,会在后续更新时运行),不会在客户端或用户请求时执行
  • 返回的参数对象必须匹配动态路由段的名称(比如路由是[slug],就返回包含slug字段的对象数组)
  • 生成的静态页面会被缓存,后续访问无需重新生成,大幅提升性能与SEO表现
  • 可以搭配fetch使用,Next.js会自动缓存fetch请求的数据,用于预渲染页面

简单示例(本地数据版)

假设你有一个动态路由app/posts/[slug]/page.js,代码如下:

// app/posts/[slug]/page.js
// 先定义generateStaticParams
export async function generateStaticParams() {
  // 模拟从数据库或本地文件获取所有博客的slug
  const blogPosts = [
    { slug: "hello-nextjs-13", title: "初识Next.js 13 App Router" },
    { slug: "react-basics-review", title: "React核心知识点回顾" }
  ];

  // 返回参数数组,每个对象的key要和动态路由段的名称一致
  return blogPosts.map(post => ({
    slug: post.slug
  }));
}

// 页面组件,接收params参数
export default function BlogPostPage({ params }) {
  // 根据params.slug匹配对应博客内容
  const currentPost = blogPosts.find(post => post.slug === params.slug);

  return (
    <div className="blog-post">
      <h1>{currentPost.title}</h1>
      {/* 这里可以添加博客内容 */}
    </div>
  );
}

构建项目后,Next.js会自动生成/posts/hello-nextjs-13和/posts/react-basics-review两个静态页面,用户访问时直接加载预渲染好的内容。

关于你看的YouTube教程

那些用API获取视频、待办事项的案例,本质逻辑和上面的博客示例完全一致:都是先从数据源(API/数据库/本地文件)拿到需要的动态参数(视频ID、待办ID),返回给generateStaticParams(),让Next.js预渲染对应的静态页面。只是数据源不同,核心逻辑没变。

内容的提问来源于stack exchange,提问作者Ameer Hamza Khetran

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 01:35:28