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にプッシュしてリンクを共有していただけると役立ちます。
まとめ
再度、ここで行ったことのグラフィカルな概要を示します。

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