Capítulo 164 de 456
Use generateStaticParams em combinação com segmentos dinâmicos para pré-renderizar rotas estaticamente no build, em vez de sob demanda a cada requisição.
page.tsx, layout.tsx ou route.ts; retorna um array de objetos, cada um preenchendo os segmentos dinâmicos de uma rota.generateStaticParams é visitada (404 se false).page.js filho pode gerar params para todos os segmentos dinâmicos da rota (pai e filho).layout.js pai gera params só do seu próprio segmento; o filho reaproveita via argumento params.generateStaticParams deve retornar ao menos um param — array vazio causa build error; use placeholder + notFound() se os valores reais não são conhecidos no build.params.// app/blog/[slug]/page.tsx
export async function generateStaticParams() {
const posts = await fetch('https://.../posts').then((res) => res.json())
return posts.map((post) => ({ slug: post.slug }))
}
export default async function Page({
params,
}: {
params: Promise<{ slug: string }>
}) {
const { slug } = await params
}
// Subconjunto no build + resto sob demanda, bloqueando o resto com dynamicParams
export const dynamicParams = false
export async function generateStaticParams() {
const posts = await fetch('https://.../posts').then((res) => res.json())
return posts.slice(0, 10).map((post) => ({ slug: post.slug }))
}
dynamicParams = false faz com que paths fora da lista retornem 404 em vez de renderizar sob demanda.| Rota de exemplo | Tipo de retorno |
|---|---|
/product/[id] | { id: string }[] |
/products/[category]/[product] | { category: string, product: string }[] |
/products/[...slug] | { slug: string[] }[] |
generateStaticParams não retornar array, a rota vira dinâmica em vez de estática.layout.js só pode gerar params do seu próprio segmento e acima, nunca de segmentos filhos.getStaticPaths do Pages Router.generateStaticParams NÃO é chamado de novo.notFound() se necessário.fetch é automaticamente memoizado entre todas as funções generate*, Layouts, Pages e Server Components na mesma requisição.use cache em Route Handlers para cache ótimo junto de geração estática.generateStaticParams aninhado.generateStaticParams em Route Handlers para cache eficiente.