generateStaticParams
generateStaticParams
関数は、動的ルートセグメントと組み合わせて、リクエスト時にオンデマンドで生成するのではなく、ビルド時に静的にルートを生成するために使用できます。
補足:
generateStaticParams
で生成されていない動的セグメントにアクセスした際の挙動を制御するには、dynamicParams
セグメント設定オプションを使用できます。
- ランタイム時にパスを再検証(ISR)するには、
generateStaticParams
から空の配列を返すか、export const dynamic = 'force-static'
を利用する必要があります。
next dev
中は、ルートに移動するとgenerateStaticParams
が呼び出されます。
next build
中は、対応するレイアウトまたはページが生成される前にgenerateStaticParams
が実行されます。
- 再検証(ISR)中は、
generateStaticParams
は再度呼び出されません。
generateStaticParams
は、PagesルーターのgetStaticPaths
関数を置き換えます。
options.params
(オプション)
ルート内の複数の動的セグメントでgenerateStaticParams
を使用する場合、子のgenerateStaticParams
関数は、親が生成する各params
セットに対して1回実行されます。
params
オブジェクトには、親のgenerateStaticParams
から設定されたparams
が含まれており、子セグメント内のparams
を生成するために使用できます。
generateStaticParams
は、各オブジェクトが1つのルートの動的セグメントを表すオブジェクトの配列を返す必要があります。
- オブジェクト内の各プロパティはルートに設定される動的セグメントです。
- プロパティ名はセグメントの名前、プロパティ値はそのセグメントに設定される値です。
例示ルート | generateStaticParams の戻り値の型 |
---|
/product/[id] | { id: string }[] |
/products/[category]/[product] | { category: string, product: string }[] |
/products/[...slug] | { slug: string[] }[] |
ビルド時にすべてのパスを静的にレンダリングするには、generateStaticParams
に完全なパスのリストを指定します:
ビルド時にパスのサブセットを静的にレンダリングし、残りは初めてアクセスされたランタイム時にレンダリングするには、パスの部分的なリストを返します:
次に、dynamicParams
セグメント設定オプションを使用して、generateStaticParams
で生成されていない動的セグメントにアクセスした際の挙動を制御できます。
初めてアクセスされたランタイム時にすべてのパスを静的にレンダリングするには、空の配列を返す(ビルド時にパスは生成されない)か、export const dynamic = 'force-static'
を利用します:
補足: generateStaticParams
からは常に配列を返す必要があります。空の場合でも同様です。そうしないと、ルートは動的にレンダリングされます。
未指定のパスが実行時に静的にレンダリングされるのを防ぐには、ルートセグメントで export const dynamicParams = false
オプションを追加します。この設定オプションを使用すると、generateStaticParams
によって提供されたパスのみが提供され、未指定のルートは404になるか、(キャッチオールルートの場合)マッチします。
現在のレイアウトまたはページより上の動的セグメントのパラメータを生成できますが、下には生成できません。例えば、app/products/[category]/[product]
ルートの場合:
app/products/[category]/[product]/page.js
は、[category]
と [product]
の両方のパラメータを生成できます。
app/products/[category]/layout.js
は、[category]
ののみパラメータを生成できます。
複数の動的セグメントを持つルートのパラメータを生成する方法は2つあります:
子ルートセグメントから複数の動的セグメントを生成します。
最初に親セグメントを生成し、その結果を使用して子セグメントを生成します。
子ルートセグメントの generateStaticParams
関数は、親の generateStaticParams
が生成する各セグメントに対して1回実行されます。
子の generateStaticParams
関数は、親の generateStaticParams
関数から返された params
を使用して、独自のセグメントを動的に生成できます。
補足: fetch
リクエストは、すべての generate
プレフィックス付き関数、レイアウト、ページ、サーバーコンポーネント間で同じデータに対して自動的にメモ化されます。fetch
が利用できない場合は、React cache
を使用できます。
バージョン | 変更点 |
---|
v13.0.0 | generateStaticParams を導入。 |