什么是 React Server Components
React Server Components(RSC)是 React 团队提出的一种新组件模式。与传统的客户端组件不同,RSC 在服务端渲染,永远不会被发送到客户端的 JavaScript bundle 中。
为什么需要 RSC
传统的 React 应用面临着几个核心问题:
- Bundle 体积膨胀:随着应用增长,客户端 JS 越来越大
- 首屏加载慢:大量 JS 需要在客户端执行才能渲染
- SEO 挑战:纯客户端渲染对搜索引擎不友好
RSC 的出现正是为了解决这些问题。
工作原理
RSC 的核心思想是组件的职责分离:
// 这是一个 Server Component
async function ArticleList() {
const articles = await db.articles.findMany();
return (
<div>
{articles.map(article => (
<ArticleCard key={article.id} article={article} />
))}
</div>
);
}
服务端组件可以直接:
- 访问数据库
- 读取文件系统
- 调用后端 API
- 使用
async/await
与客户端组件的区别
| 特性 | Server Component | Client Component | |------|-----------------|-----------------| | 渲染位置 | 服务端 | 客户端 | | 可访问后端资源 | ✅ | ❌ | | 可使用 hooks | ❌ | ✅ | | 可添加事件监听 | ❌ | ✅ | | 增加 bundle 体积 | ❌ | ✅ |
最佳实践
在实际项目中使用 RSC,建议遵循以下原则:
- 默认使用 Server Component:只在需要交互时使用
"use client" - 数据获取放在服务端:减少客户端请求
- 把交互逻辑下沉到叶子组件:保持组件树的 RSC 优势
// ✅ 推荐:只把交互部分标记为客户端组件
function Dashboard() {
return (
<div>
<ServerStats /> {/* RSC */}
<ClientChart /> {/* "use client" */}
<RecentActivity /> {/* RSC */}
</div>
);
}
总结
React Server Components 代表了 React 发展的重要方向。理解并合理运用 RSC,能够显著提升应用性能和开发体验。
本文基于 Next.js App Router 的实践总结,持续更新中。