30
章30
ページパスが外部データに依存する
前回のレッスンでは、**ページコンテンツ**が外部データに依存する場合について説明しました。インデックスページをレンダリングするために必要なデータをフェッチするために、getStaticProps
を使用しました。
このレッスンでは、各**ページパス**が外部データに依存する場合について説明します。Next.jsでは、外部データに依存するパスを持つページを静的に生成できます。これにより、Next.jsで**動的URL**が有効になります。

動的ルートでページを静的に生成する方法
このケースでは、ブログ投稿のために動的ルートを作成したいと考えています。
- 各投稿のパスを
/posts/<id>
としたいと考えています。ここで、<id>
は最上位のposts
ディレクトリの下にあるMarkdownファイルの名前です。 ssg-ssr.md
とpre-rendering.md
があるので、パスは/posts/ssg-ssr
と/posts/pre-rendering
となるようにしたいです。
ステップの概要
以下の手順を踏むことで、これを行うことができます。**まだこれらの変更を行う必要はありません** — 次のページで全て行います。
まず、pages/posts
の下に**[id].js
**というページを作成します。[
で始まり]
で終わるページは、Next.jsの動的ルートです。
pages/posts/[id].js
では、これまでに作成した他のページと同様に、投稿ページをレンダリングするコードを記述します。
import Layout from '../../components/layout';
export default function Post() {
return <Layout>...</Layout>;
}
さて、ここからが新しい点です。このページから、getStaticPaths
という非同期関数をエクスポートします。この関数では、id
の**とりうる値**のリストを返す必要があります。
import Layout from '../../components/layout';
export default function Post() {
return <Layout>...</Layout>;
}
export async function getStaticPaths() {
// Return a list of possible value for id
}
最後に、再びgetStaticProps
を実装する必要があります。今回は、指定されたid
を持つブログ投稿に必要なデータをフェッチするためです。getStaticProps
にはparams
が与えられ、それにはid
が含まれています(ファイル名が[id].js
であるため)。
import Layout from '../../components/layout';
export default function Post() {
return <Layout>...</Layout>;
}
export async function getStaticPaths() {
// Return a list of possible value for id
}
export async function getStaticProps({ params }) {
// Fetch necessary data for the blog post using params.id
}
ここまで説明した内容を図でまとめました

次のページで試してみましょう!
これは役に立ちましたか?