generateStaticParams
generateStaticParams 函数可以与 动态路由段 结合使用,在构建时 静态生成 路由,而不是在请求时按需生成。
- TypeScript
- JavaScript
app/blog/[slug]/page.tsx
// 返回一个 `params` 列表来填充 [slug] 动态段
export async function generateStaticParams() {
const posts = await fetch('https://.../posts').then((res) => res.json())
return posts.map((post) => ({
slug: post.slug,
}))
}
// 将使用 `generateStaticParams` 返回的 `params` 静态生成此页面的多个版本
export default async function Page({
params,
}: {
params: Promise<{ slug: string }>
}) {
const { slug } = await params
// ...
}
app/blog/[slug]/page.js
// 返回一个 `params` 列表来填充 [slug] 动态段
export async function generateStaticParams() {
const posts = await fetch('https://.../posts').then((res) => res.json())
return posts.map((post) => ({
slug: post.slug,
}))
}
// 将使用 `generateStaticParams` 返回的 `params` 静态生成此页面的多个版本
export default async function Page({ params }) {
const { slug } = await params
// ...
}
提示:
- 你可以使用
dynamicParams段配置选项来控制当访问未通过generateStaticParams生成的动态段时会发生什么。- 你必须从
generateStaticParams返回 空数组 或使用export const dynamic = 'force-static'以便在运行时重新验证(ISR)路径。- 在
next dev期间,当你导航到路由时,generateStaticParams将被调用。- 在
next build期间,generateStaticParams在生成相应的布局或页面之前运行。- 在重新验证(ISR)期间,
generateStaticParams不会被再次调用。generateStaticParams替换了 Pages 路由中的getStaticPaths函数。
参数
options.params(可选)
如果路由中的多个动态段使用 generateStaticParams,则子 generateStaticParams 函数会为父级生成的每组 params 执行一次。
params 对象包含来自父级 generateStaticParams 的填充 params,可用于 在子段中生成 params。