Junior #dynamic-routes#ssg#generatestaticparams
Dynamic route và generateStaticParams trong App Router dùng thế nào?
⚡ Trả lời nhanh
Thư mục `[slug]` tạo route động; `[...slug]` bắt nhiều đoạn, `[[...slug]]` bắt cả đường dẫn gốc. `generateStaticParams` trả danh sách param để pre-render lúc build. Từ Next 15, `params` là Promise nên phải `await`.
// app/blog/[slug]/page.tsx
export async function generateStaticParams() {
const posts = await getPosts();
return posts.map((p) => ({ slug: p.slug }));
}
export default async function Page({ params }: { params: Promise<{ slug: string }> }) {
const { slug } = await params; // Next 14: params là object thường
const post = await getPost(slug);
if (!post) notFound();
return <article>{post.title}</article>;
}
- Param không có trong
generateStaticParamsmặc định vẫn render theo yêu cầu rồi cache (dynamicParams = true); đặtfalseđể trả 404. generateStaticParamsở layout cha có thể lồng với route con.- Dùng
notFound()để hiển thịnot-found.tsx.