Không bắt buộc. generateStaticParams chỉ quyết định tập được prerender lúc build; phần còn lại có thể render lần đầu khi có người truy cập rồi được cache lại.
Chiến lược thường dùng: build sẵn nhóm quan trọng, phần đuôi dài để on-demand.
export async function generateStaticParams() {
const top = await getTopProducts(1000) // chỉ prerender 1000 sản phẩm bán chạy
return top.map(p => ({ slug: p.slug }))
}
export const revalidate = 3600Với dynamicParams = true (mặc định), slug thứ 1001 khi được truy cập lần đầu sẽ render trên server, lưu vào cache rồi phục vụ như static cho các request sau. Đặt dynamicParams = false nếu muốn slug ngoài danh sách trả 404 — hợp với tập dữ liệu đóng.
Lưu ý thực tế:
- Hàm này chạy lúc build, tránh gọi API bị rate limit; nên đọc thẳng DB hoặc dùng bản dump.
- Route lồng nhau nhiều tầng dynamic thì mỗi tầng có generateStaticParams riêng và tổ hợp nhân lên — dễ làm build phình thời gian.
- Sau khi sửa dữ liệu, dùng revalidatePath('/products/' + slug) thay vì chờ hết revalidate.