Next.jsには、**静的生成**と**サーバーサイドレンダリング**の2つの形式の事前レンダリングがあります。違いは、ページのHTMLを**いつ**生成するかにあります。
重要なのは、Next.jsでは、ページごとに使用する事前レンダリング形式を**選択**できることです。ほとんどのページで静的生成を使用し、他のページでサーバーサイドレンダリングを使用することで、「ハイブリッド」Next.jsアプリを作成できます。
getStaticProps()
)次に、getSortedPostsData
のインポートを追加し、pages/index.js
のgetStaticProps
内で呼び出す必要があります。
エディターでpages/index.js
を開き、エクスポートされたHome
コンポーネントの上に次のコードを追加します
import { getSortedPostsData } from '../lib/posts';
export async function getStaticProps() {
const allPostsData = getSortedPostsData();
return {
props: {
allPostsData,
},
};
}
getStaticProps
のprops
オブジェクト内にallPostsData
を返すことで、ブログ投稿はHome
コンポーネントにpropとして渡されます。これで、次のようにブログ投稿にアクセスできます
export default function Home ({ allPostsData }) { ... }
ブログ投稿を表示するために、自己紹介を含むセクションの下にデータを含む別の<section>
タグを追加するようにHome
コンポーネントを更新しましょう。また、propsを()
から({ allPostsData })
に変更することも忘れないでください
export default function Home({ allPostsData }) {
return (
<Layout home>
{/* Keep the existing code here */}
{/* Add this <section> tag below the existing <section> tag */}
<section className={`${utilStyles.headingMd} ${utilStyles.padding1px}`}>
<h2 className={utilStyles.headingLg}>Blog</h2>
<ul className={utilStyles.list}>
{allPostsData.map(({ id, date, title }) => (
<li className={utilStyles.listItem} key={id}>
{title}
<br />
{id}
<br />
{date}
</li>
))}
</ul>
</section>
</Layout>
);
}
https://:3000にアクセスすると、ブログデータが表示されるはずです。
おめでとうございます!外部データ(ファイルシステムから)を正常にフェッチし、このデータでインデックスページを事前レンダリングしました。
次のページでは、getStaticProps
を使用するためのヒントについて説明します。