generateStaticParams
generateStaticParams
函数可以与 动态路由段 结合使用,以在构建时 静态生成 路由,而不是在请求时按需生成。
值得注意的是
options.params
(可选)
如果路由中的多个动态段使用 generateStaticParams
,则对于父级生成的每组 params
,子级 generateStaticParams
函数会执行一次。
params
对象包含父级 generateStaticParams
填充的 params
,可用于 在子段中生成 params
。
generateStaticParams
应返回一个对象数组,每个对象表示单个路由的已填充动态段。
- 对象中的每个属性都是要填充的路由的动态段。
- 属性名是段的名称,属性值是该段应填充的内容。
示例路由 | generateStaticParams 返回类型 |
---|
/product/[id] | { id: string }[] |
/products/[category]/[product] | { category: string, product: string }[] |
/products/[...slug] | { slug: string[] }[] |
要在构建时静态渲染所有路径,请向 generateStaticParams
提供完整的路径列表:
要在构建时静态渲染部分路径,并在运行时首次访问时渲染其余部分,请返回部分路径列表:
然后,通过使用 dynamicParams
段配置选项,你可以控制访问未由 generateStaticParams
生成的动态段时会发生什么。
要在首次访问时静态渲染所有路径,请返回一个空数组 (构建时不会渲染任何路径) 或使用 export const dynamic = 'force-static'
:
值得注意的是: 你必须始终从 generateStaticParams
返回一个数组,即使它是空的。否则,路由将被动态渲染。
要防止未指定的路径在运行时被静态渲染,请在路由段中添加 export const dynamicParams = false
选项。使用此配置选项时,只有 generateStaticParams
提供的路径才会被服务,未指定的路由将返回 404 或匹配 ( 在 catch-all 路由 的情况下)。
你可以为当前布局或页面上方的动态段生成参数,但不能为下方的动态段生成参数。例如,对于 app/products/[category]/[product]
路由:
app/products/[category]/[product]/page.js
可以为 [category]
和 [product]
同时生成参数。
app/products/[category]/layout.js
只能为 [category]
生成参数。
有两种方法可以为具有多个动态段的路由生成参数:
从子路由段生成多个动态段。
首先生成父段,然后使用结果生成子段。
子路由段的 generateStaticParams
函数会为父 generateStaticParams
生成的每个段执行一次。
子 generateStaticParams
函数可以使用从父 generateStaticParams
函数返回的 params
来动态生成自己的段。
值得注意的是:对于所有以 generate
为前缀的函数、布局、页面和服务器组件,fetch
请求会自动为相同的数据进行 缓存。如果无法使用 fetch
,可以使用 React 的 cache
函数
版本 | 变更 |
---|
v13.0.0 | 引入 generateStaticParams |