Capítulo 44 de 456
Incremental Static Regeneration atualiza conteúdo estático em produção sem rebuild completo do site, combinando páginas prerenderizadas rápidas com revalidação em background. Aplica-se quando não se usa cacheComponents (para isso, ver ISR with Cache Components).
revalidate (route segment config): número em segundos; Next.js invalida o cache no máximo uma vez a cada N segundos.generateStaticParams: lista os params a prerenderizar em build; params não listados são gerados sob demanda (comportamento controlado por dynamicParams).revalidatePath(path): invalida cache de uma rota inteira por caminho; regeneração ocorre na próxima requisição, não imediatamente.revalidateTag(tag, 'max'): invalida todas as entradas de cache com determinada tag; usado com fetch({ next: { tags } }) ou unstable_cache.unstable_cache: cacheia resultado de função (ex.: query de ORM/DB) com revalidate e tags, para casos sem fetch.x-nextjs-cache header: observa comportamento do cache; valores HIT, STALE, MISS, REVALIDATED.NEXT_PRIVATE_DEBUG_CACHE=1: variável de ambiente que faz o servidor logar hits/misses de ISR no console.// app/blog/[id]/page.tsx
export const revalidate = 60 // invalida no máximo a cada 60s
export async function generateStaticParams() {
const posts = await fetch('https://api.vercel.app/blog').then(r => r.json())
return posts.map((post) => ({ id: String(post.id) }))
}
export default async function Page({ params }: { params: Promise<{ id: string }> }) {
const { id } = await params
const post = await fetch(`https://api.vercel.app/blog/${id}`).then(r => r.json())
return <main><h1>{post.title}</h1><p>{post.content}</p></main>
}
revalidate + generateStaticParams para ISR clássico numa rota dinâmica.// app/actions.ts
'use server'
import { revalidateTag } from 'next/cache'
export async function createPost() {
revalidateTag('posts', 'max') // invalida tudo marcado com 'posts'
}
| Deployment Option | Suportado |
|---|---|
| Node.js server | Sim |
| Docker container | Sim |
| Static export | Não |
| Adapters | Depende da plataforma |
/post/1, não /post-1).revalidatePath/revalidateTag regeneram imediatamente: eles só invalidam; a regeneração acontece na próxima requisição.fetch numa rota tiverem revalidate diferentes, prevalece o menor tempo para o ISR da rota (mas cada fetch mantém sua própria frequência de cache).revalidate: 0 ou no-store em qualquer fetch da rota força renderização dinâmica.x-nextjs-cache e NEXT_PRIVATE_DEBUG_CACHE=1 são as ferramentas primárias para depurar comportamento de cache em produção/local.cacheComponents está habilitado.