動的ルート
なぜ学ぶか: ブログ記事が100本あるとして、100個のフォルダは作れません。「1つのファイルで無数のページを作る」のが動的ルートです。角カッコのフォルダ名という、知らないと読めない記法を種明かしします。
まずはこの例を見てみましょう
src/app/blog/[slug]/page.tsx
↑
[slug] = 「何でも入る枠」のフォルダ名
/blog/hello にアクセス → このページが表示され、slug は "hello"
/blog/nextjs にアクセス → 同じページが表示され、slug は "nextjs"角カッコのフォルダが「可変の枠」。実際に何が入ったかはparamsで受け取ります。
[名前]=URLの可変部分
例のとおり、[slug]フォルダのページは/blog/○○のどんなURLでも表示されます。
paramsで「何が入ったか」を受け取る
ページはparamsから実際の値(helloなど)を受け取り、その値でデータを探して表示します。
「一覧+詳細」はほぼこの形
/blog/[slug]・/users/[id] — 一覧から詳細へ、という構造はほぼ動的ルートで作られます。このlearnアプリのトピックページも同じ仕組みです。
コード例
// app/blog/[slug]/page.tsx
// /blog/hello にアクセス → params は { slug: "hello" }
export default async function BlogPost({
params,
}: {
params: Promise<{ slug: string }>;
}) {
const { slug } = await params; // 最近の Next.js では await が必要
return (
<article>
<h1>記事: {slug}</h1>
</article>
);
}期待される出力
(/blog/hello にアクセスした場合) 記事: hello
このlearnアプリも/topics/[topicId]という動的ルートで、1つのファイルから99トピック分のページを作っています。
ステップ 1 / 2
※ カリキュラムの内容はAIが生成しており、誤りが含まれる場合があります。正確な情報は公式ドキュメント等でご確認ください。