32
チャプター32
getStaticPropsの実装
指定されたid
で投稿をレンダリングするために、必要なデータをフェッチする必要があります。
そのためには、再度lib/posts.js
を開き、以下のgetPostData
関数を最後に追加します。これはid
に基づいて投稿データを返します。
export function getPostData(id) {
const fullPath = path.join(postsDirectory, `${id}.md`);
const fileContents = fs.readFileSync(fullPath, 'utf8');
// Use gray-matter to parse the post metadata section
const matterResult = matter(fileContents);
// Combine the data with the id
return {
id,
...matterResult.data,
};
}
次に、pages/posts/[id].js
を開き、この行を置き換えます
import { getAllPostIds } from '../../lib/posts';
以下のコードに
import { getAllPostIds, getPostData } from '../../lib/posts';
export async function getStaticProps({ params }) {
const postData = getPostData(params.id);
return {
props: {
postData,
},
};
}
投稿ページは現在、getStaticProps
内でgetPostData
関数を使用して投稿データを取得し、それをpropsとして返しています。
次に、Post
コンポーネントがpostData
を使用するように更新しましょう。pages/posts/[id].js
でエクスポートされたPost
コンポーネントを以下のコードに置き換えます。
export default function Post({ postData }) {
return (
<Layout>
{postData.title}
<br />
{postData.id}
<br />
{postData.date}
</Layout>
);
}
以上です!これらのページにアクセスしてみてください
各ページのブログデータが表示されるはずです

素晴らしい!動的ルーティングを正常に生成できました。
何か問題がありますか?
エラーに遭遇した場合は、ファイルに正しいコードがあることを確認してください
pages/posts/[id].js
はこのようになるはずです。lib/posts.js
はこのようになるはずです。- (まだ動作しない場合) 残りのコードはこのようになるはずです。
まだ行き詰まっている場合は、GitHub Discussionsでコミュニティに質問してください。コードをGitHubにプッシュしてリンクを共有すると、他の人が確認しやすくなります。
概要
再度、ここで行ったことの図による概要です

ブログのマークダウンコンテンツはまだ表示していません。次にこれを行いましょう。
これは役立ちましたか?