9、React Server Components 深度解析

360 阅读4分钟

——RSC来了,React真正懂得“前后联动”了


1. 引子:React 这么多年,终于有了“后端灵魂”

React这些年飞速迭代,从类组件 → Hooks → Suspense → Concurrent → RSC。
很多人第一反应是:
“又出新花样了,是不是噱头?”

非也!

RSC(React Server Components)

是 React 核心团队未来十年最重要的方向之一,
是真正把 React 带入「前后端一体化」时代的革命性升级。


2. 什么是 RSC(React Server Components)?

一句话解释:

一种新的组件模型:React组件可以在服务器上渲染,然后发送结果到客户端。

和传统 SSR/CSR 最大不同是:

模型渲染位置渲染内容数据传输
CSR浏览器端全部JS+数据整个页面下载+执行
SSR服务端首屏 + 客户端接管HTML + Hydrate首屏HTML+客户端JS
RSC服务端渲染部分组件组件数据结构非HTML,而是 VDOM结构

简化理解:

RSC 把组件“预处理”完再发到前端,前端不再需要自己执行JS拿数据再渲染。


3. RSC 能解决什么问题?

问题RSC解决方式
首屏慢在服务端直接拿数据+渲染结构,传到前端几乎就能展示
bundle太大服务端组件不打包进浏览器,极大减小客户端JS体积
数据请求层混乱服务端组件可以直接调用DB/API,不再需要“中间跳转层”
SEO差默认就是HTML结构,不用等待hydrate

一句话总结:

RSC让React像“PHP + React”的结合体:既能写UI,又能写数据逻辑。


4. RSC 和 SSR 有啥区别?

对比项SSRRSC
渲染产物HTMLReact组件树(VDOM)
客户端JS体积无变化可显著减小
数据抓取需封装API层可直接请求DB/API
组件粒度整页按组件粒度决定服务端/客户端执行

SSR vs RSC 渲染机制对比图

SSR(传统服务端渲染):
用户请求
  ↓
服务器渲染完整HTML
  ↓
客户端hydrate绑定事件
  ↓
显示完整页面

RSC(Server Components):
用户请求
  ↓
服务器只渲染组件“结构+数据”
  ↓
客户端直接接收结构并合成展示
  ↓
交互组件再按需hydrate


5. 怎么使用 RSC?(基于 Next.js 13/14)

RSC 执行架构流程图

[用户访问页面][Next.js 识别 Server Component][在服务端执行组件逻辑,如拉DB数据][生成虚拟组件结构][发送给浏览器][客户端接管客户端组件部分(use client)]

最推荐使用框架:Next.js(Vercel亲儿子)

👇 核心规则:

  1. 默认组件就是 Server Component
  2. 想在客户端运行 → use client 写在组件最上面
  3. Server Component 可以调用数据库、API
  4. Server Component 不能用 useStateuseEffect

示例:

tsx
复制编辑
// app/page.tsx (Server Component)
import { getPosts } from '@/lib/post-service'
import PostCard from './PostCard'

export default async function Page() {
  const posts = await getPosts()
  return (
    <div>
      {posts.map(post => (
        <PostCard key={post.id} post={post} />
      ))}
    </div>
  )
}
tsx
复制编辑
// PostCard.tsx (Client Component)
'use client'
export default function PostCard({ post }) {
  return <div>{post.title}</div>
}

👉 解释:

  • page.tsx 在服务器上执行,直接拉数据
  • PostCard 在客户端渲染,有交互(比如点击)时才需要上客户端

6. 开发中注意的坑 ⚠️

问题说明
Server Component 不能有交互逻辑useState/useEffect 都不行,想交互要拆出去
组件共享状态困难Server和Client之间不能互相传JS函数,只能靠props和数据结构
调试体验有门槛初期RSC调试不如传统CSR顺手,IDE提示也不完善

7. 谁在用 RSC?

公司使用场景
Vercel全面应用在Next.js 13官网
ShopifyHydrogen框架全线支持RSC
腾讯/字节实验组已在大型SSR站点灰度测试
小红书技术团队也已调研引入中(2024年公开文章)

8. 适合什么项目上 RSC?

✅ SEO要求高
✅ 组件层级深、数据来源多
✅ 首屏性能要求高(如电商、内容类网站)
✅ 开发团队已有Next.js基础

RSC 使用建议图卡

✅ SEO要求高  
✅ 首屏性能关键  
✅ 组件重复度高、无状态  
✅ 已用Next.js 13/14  
❌ 完全交互型应用(如SPA工具)  
❌ 团队尚未理解组件职责边界


9. 总结:RSC是“服务端驱动UI”的新时代入口

React 在 RSC 出现之前,一直是“客户端优先”,
但这导致:

  • 数据获取复杂
  • 渲染效率低
  • SEO体验差

而 RSC 开始解决这一切。


10. 彩蛋:一句话总结 RSC 的意义

RSC 是 React 给你的“后端新超级能力”—— 写UI的同时写数据,不再受限于浏览器。