Next.js 静态生成
介绍
Next.js 是一个流行的 React 框架,提供了多种渲染方式,包括静态生成(Static Generation)。静态生成是指在构建时生成 HTML 页面,而不是在每次请求时动态生成。这种方式非常适合内容不频繁变化的网站,例如博客、文档站点或产品展示页面。
静态生成的优势包括:
- 更快的加载速度:页面在构建时已经生成,用户访问时无需等待服务器渲染。
- 更好的 SEO:静态页面可以被搜索引擎轻松抓取和索引。
- 更低的服务器负载:页面是预先生成的,服务器只需提供静态文件。
接下来,我们将逐步学习如何在 Next.js 中使用静态生成。
静态生成的基本用法
在 Next.js 中,静态生成是通过 getStaticProps
函数实现的。这个函数在构建时运行,用于获取页面所需的数据,并将其作为 props 传递给页面组件。
示例:静态生成一个简单的页面
假设我们有一个博客页面,需要在构建时获取文章列表并生成静态页面。以下是实现步骤:
- 创建页面文件:在
pages
目录下创建一个文件,例如blog.js
。 - 定义
getStaticProps
函数:在页面文件中导出getStaticProps
函数,用于获取数据。
// pages/blog.js
import React from 'react';
export default function Blog({ posts }) {
return (
<div>
<h1>博客文章</h1>
<ul>
{posts.map((post) => (
<li key={post.id}>{post.title}</li>
))}
</ul>
</div>
);
}
// 在构建时运行,获取数据
export async function getStaticProps() {
const res = await fetch('https://jsonplaceholder.typicode.com/posts');
const posts = await res.json();
return {
props: {
posts,
},
};
}
-
构建项目:运行
next build
命令,Next.js 会在构建时调用getStaticProps
,生成静态页面。 -
访问页面:构建完成后,访问
/blog
页面,你将看到预先生成的文章列表。
备注
getStaticProps
只在构建时运行,因此适合用于数据不频繁变化的页面。如果数据需要频繁更新,可以考虑使用服务器端渲染(SSR)或增量静态生成(ISR)。
静态生成与动态路由
Next.js 支持静态生成与动态路由结合使用。例如,为每篇博客文章生成一个静态页面。