Next.js 有两种预渲染形式:**静态生成** 和 **服务器端渲染**。区别在于它**何时**生成页面的 HTML。
重要的是,Next.js 允许你为每个页面**选择**使用哪种预渲染形式。你可以通过对大多数页面使用静态生成,对其他页面使用服务器端渲染来创建一个“混合”的 Next.js 应用。
getStaticProps())现在,我们需要添加 getSortedPostsData 的导入,并在 getStaticProps 中调用它,位于 pages/index.js 中。
在你的编辑器中打开 pages/index.js,并在导出的 Home 组件上方添加以下代码
import { getSortedPostsData } from '../lib/posts';
export async function getStaticProps() {
const allPostsData = getSortedPostsData();
return {
props: {
allPostsData,
},
};
}
通过在 getStaticProps 中的 props 对象内返回 allPostsData,博客文章将作为 prop 传递给 Home 组件。现在你可以像这样访问博客文章
export default function Home ({ allPostsData }) { ... }
为了显示博客文章,让我们更新 Home 组件,在自我介绍部分的下方添加另一个带有以下数据的 <section> 标签。不要忘记将 prop 从 () 更改为 ({ 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 的技巧。