getStaticPathsの実装
まず、ファイルを設定しましょう:
pages/posts
ディレクトリ内に[id].js
というファイルを作成します。- また、
pages/posts
ディレクトリ内のfirst-post.js
を削除してください — これはもう使用しません。
次に、エディタでpages/posts/[id].js
を開き、以下のコードを貼り付けます。...
の部分は後で埋めます:
import Layout from '../../components/layout';
export default function Post() {
return <Layout>...</Layout>;
}
次に、lib/posts.js
を開き、以下のgetAllPostIds
関数をファイルの最後に追加します。これはposts
ディレクトリ内のファイル名(.md
を除く)のリストを返します:
export function getAllPostIds() {
const fileNames = fs.readdirSync(postsDirectory);
// 以下のような配列を返します:
// [
// {
// params: {
// id: 'ssg-ssr'
// }
// },
// {
// params: {
// id: 'pre-rendering'
// }
// }
// ]
return fileNames.map((fileName) => {
return {
params: {
id: fileName.replace(/\.md$/, ''),
},
};
});
}
重要: 返されるリストは単なる文字列の配列ではなく、上記のコメントのようなオブジェクトの配列でなければなりません。各オブジェクトにはparams
キーが含まれ、その中にid
キー(ファイル名で[id]
を使用しているため)を持つオブジェクトが含まれている必要があります。そうでない場合、getStaticPaths
は失敗します。
最後に、getAllPostIds
関数をインポートし、getStaticPaths
内で使用します。pages/posts/[id].js
を開き、以下のコードをPost
コンポーネントのエクスポート前にコピーしてください:
import { getAllPostIds } from '../../lib/posts';
export async function getStaticPaths() {
const paths = getAllPostIds();
return {
paths,
fallback: false,
};
}
paths
には、getAllPostIds()
によって返される既知のパスの配列が含まれ、pages/posts/[id].js
で定義されたparamsが含まれます。詳細はpaths
キーのドキュメントを参照してください。- 今のところ
fallback: false
は無視してください — これは後で説明します。
ほぼ完了です — しかし、まだgetStaticProps
を実装する必要があります。次のページでそれを行いましょう!