React Server Components 深入理解
React Server Components 是 React 团队提出的一个重要概念,本文将深入探讨其工作原理和最佳实践
2024-03-10
什么是 Server Components
React Server Components(RSC)是 React 的一种新组件类型,它只在服务端渲染,不会向客户端发送任何 JavaScript 代码。
与 SSR 的区别
很多人会把 Server Components 和 SSR 混淆,其实它们有本质区别:
| 特性 | SSR | Server Components |
|---|---|---|
| 首次渲染 | 服务端渲染 HTML | 服务端渲染 HTML |
| 客户端 JS | 需要 hydrate | 不需要 hydrate |
| 水合成本 | 有 | 无 |
| 交互性 | 需要 JS | 有限 |
优点
1. 零 Bundle Size
Server Components 不会被打包到客户端 bundle 中,直接减小 bundle 体积:
// Server Component
import { readFile } from 'fs';
async function BlogPost() {
const content = await readFile('./post.md', 'utf-8');
return <article>{content}</article>;
}
2. 直接访问后端资源
Server Components 可以直接访问数据库、文件系统等:
import { db } from './db';
async function UserList() {
const users = await db.users.findAll();
return (
<ul>
{users.map(user => (
<li key={user.id}>{user.name}</li>
))}
</ul>
);
}
3. 自动代码分割
Client Components 和 Server Components 的边界自动成为代码分割点。
使用模式
混合使用
// Server Component
import { UserList } from './UserList';
import { UserSearch } from './UserSearch'; // Client Component
export default function Page() {
return (
<div>
<UserSearch /> {/* Client Component */}
<UserList /> {/* Server Component */}
</div>
);
}
最佳实践
- 默认使用 Server Components — 除非需要客户端交互
- 最小化 Client Components — 将交互逻辑集中在小组件中
- 数据获取在 Server — 减少客户端数据请求
总结
Server Components 代表了 React 架构的一个重要演进方向。理解并善用它可以显著提升应用性能。Next.js 的 App Router 已经全面支持 RSC,现在就是学习和实践的好时机。