ダイナミックルートの詳細
ダイナミックルートについて知っておくべき重要な情報を以下に示します。
外部APIの取得またはデータベースのクエリ
getStaticProps
と同様に、getStaticPaths
もあらゆるデータソースからデータを取得できます。この例では、getAllPostIds
(getStaticPaths
で使用される)が外部APIエンドポイントからデータを取得する場合があります:
開発環境と本番環境
- 開発環境(
npm run dev
またはyarn dev
)では、getStaticPaths
は_すべてのリクエスト_で実行されます。 - 本番環境では、
getStaticPaths
は_ビルド時_に実行されます。
フォールバック
getStaticPaths
からfallback: false
を返したことを思い出してください。これは何を意味するのでしょうか?
fallback
がfalse
の場合、getStaticPaths
で返されなかったパスは404ページになります。
fallback
がtrue
の場合、getStaticProps
の動作が変わります:
getStaticPaths
から返されたパスはビルド時にHTMLとしてレンダリングされます。- ビルド時に生成されなかったパスは404ページになりません。代わりに、Next.jsはそのようなパスへの最初のリクエストでページの「フォールバック」バージョンを提供します。
- バックグラウンドで、Next.jsはリクエストされたパスを静的に生成します。同じパスへの後続のリクエストでは、ビルド時に事前レンダリングされた他のページと同様に、生成されたページが提供されます。
fallback
がblocking
の場合、新しいパスはgetStaticProps
でサーバーサイドレンダリングされ、将来のリクエストのためにキャッシュされるため、パスごとに1回だけ発生します。
これはレッスンの範囲を超えますが、fallback: true
とfallback: 'blocking'
について詳しくは、fallback
ドキュメントをご覧ください。
キャッチオールルート
ダイナミックルートは、括弧内に3つのドット(...
)を追加することで、すべてのパスをキャッチするように拡張できます。例えば:
pages/posts/[...id].js
は/posts/a
だけでなく、/posts/a/b
、/posts/a/b/c
などにもマッチします。
これを行う場合、getStaticPaths
では、次のようにid
キーの値として配列を返す必要があります:
そして、getStaticProps
ではparams.id
が配列になります:
詳しくは、キャッチオールルートのドキュメントをご覧ください。
ルーター
Next.jsルーターにアクセスしたい場合は、next/router
からuseRouter
フックをインポートすることで可能です。
404ページ
カスタム404ページを作成するには、pages/404.js
を作成します。このファイルはビルド時に静的に生成されます。
詳しくは、エラーページのドキュメントをご覧ください。
その他の例
getStaticProps
とgetStaticPaths
を説明するためにいくつかの例を作成しました。詳細についてはソースコードをご覧ください:
- マークダウンファイルを使用したブログスターター (デモ)
- WordPressの例 (デモ)
- DatoCMSの例 (デモ)
- TakeShapeの例 (デモ)
- Sanityの例 (デモ)
以上です!
次のレッスンでは、Next.jsのAPI Routesについて説明します。