学习如何轻松构建可伸缩的 React 应用程序:服务端渲染 SSR
SSR(Server-Side Rendering,服务器端渲染)是指将 React、Vue、Angular 等客户端渲染的应用在服务器端执行一次,然后将渲染结果返回给浏览器进行展示的过程。相对于客户端渲染(CSR,Client-Side Rendering),SSR 可以提高页面的首屏加载速度和搜索引擎优化(SEO),因为它可以在服务器端直接生成 HTML,并将静态资源(如 CSS、JavaScript 等)和页面数据一起返回给客户端,从而减少客户端的渲染工作量。
并不是每个应用程序都需要使用服务器端渲染。以下是选择 SSR 的一些原因:
Next.js 对每个页面都进行预渲染,即每个页面的 HTML 都是提前生成的,而不是由客户端完成的。
预渲染有两种类型,即:
在构建时生成 HTML 页面,这些页面将在每个请求上重用。
为了生成页面,我们需要导出页面组件或 getStaticProps
函数(需要的时候,还可以导出 getStaticPaths
函数)。
const Contact = () => {
return (
<div>
<h1>Contact</h1>
<p>Send us a message!</p>
</div>
);
};
export default Contact;
内容依赖外部数据
function UserList({ users }) {
return (
<ul>
{users.map((user) => (
<li key={user.id}>{user.name}</li>
))}
</ul>
);
}
export async function getStaticProps() {
const res = await fetch("https://.../users");
const users = await res.json();
return {
props: {
users,
},
};
}
export default UserList;
路径依赖外部数据
users/[id].js
的 .js
文件,用于根据用户的 id
显示单个用户的详细信息。我们需要从 users/[id].js
文件中导出一个名为 getStaticPaths
的异步函数function User({ user }) {
return (
<div>
<h1>{user.name}</h1>
<p>{user.bio}</p>
</div>
);
}
export async function getStaticPaths() {
const res = await fetch("https://.../users");
const users = await res.json();
const paths = users.map((user) => ({
params: { id: user.id },
}));
return { paths, fallback: false };
}
export async function getStaticProps({ params }) {
const res = await fetch(`https://.../users/${params.id}`);
const user = await res.json();
return {
props: {
user,
},
};
}
export default User;
通过导出名为 getServerSideProps
的异步函数,可以在每个请求时生成 HTML。
function UserList({ users }) {
return (
<ul>
{users.map((user) => (
<li key={user.id}>{user.name}</li>
))}
</ul>
);
}
export async function getServerSideProps() {
const res = await fetch("https://.../users");
const users = await res.json();
return {
props: {
users,
},
};
}
export default UserList;
使用 Node.js 和 Express.js 进行服务器端渲染是另一种从服务器端渲染 React 页面的方式。Express.js 创建路由,我们可以使用该路由基于用户的请求指定页面。