24
章节24
带数据和不带数据的静态生成
静态生成可以带数据完成,也可以不带数据完成。
到目前为止,我们创建的所有页面都不需要获取外部数据。这些页面在应用程序构建生产版本时将自动进行静态生成。

然而,对于某些页面,您可能无法在不首先获取某些外部数据的情况下渲染 HTML。也许您需要在构建时访问文件系统、获取外部 API 或查询数据库。Next.js 支持这种情况 — 开箱即用的带数据静态生成。

使用 getStaticProps 的带数据静态生成
它是如何工作的?在 Next.js 中,当您导出一个页面组件时,您还可以导出一个名为 getStaticProps 的 async 函数。如果您这样做,那么
getStaticProps在生产环境的构建时运行,并且……- 在该函数内部,您可以获取外部数据并将其作为 props 发送到页面。
export default function Home(props) { ... }
export async function getStaticProps() {
// Get external data from the file system, API, DB, etc.
const data = ...
// The value of the `props` key will be
// passed to the `Home` component
return {
props: ...
}
}本质上,getStaticProps 允许您告诉 Next.js:“嘿,这个页面有一些数据依赖项——所以在构建时预渲染这个页面时,请确保先解决它们!”
注意:在开发模式下,
getStaticProps在每次请求时运行。
让我们使用 getStaticProps
通过实践学习更容易,所以从下一页开始,我们将使用 getStaticProps 来实现我们的博客。
这有帮助吗?