RSC 把组件按运行位置分为:
async/await 直接取数,产物不携带 JS 到浏览器;'use client' 标记,会打包进客户端 bundle,拥有交互与 hooks 能力。// Server Component
async function Article({ id }) {
const data = await db.article.find(id); // 服务端直连数据库
return <h1>{data.title}</h1>;
}Server Component 可以引入 Client Component,反之不行(Client 无法反向包含服务端逻辑),边界由 'use client' 指令划定。
服务端渲染 Server Component 后,不是产出 HTML,而是产出一种带引用的序列化流(RSC Payload)。它描述组件树、props,以及 Client Component 的「占位引用」:
1:I["client#Counter",["client-chunk.js","hash"],"Counter"]
0:["$","@1",null,{"initial":0}]浏览器收到后:服务端组件部分直接成为 UI,Client Component 部分按引用加载对应 chunk。这样实现了「服务端取数、客户端只拿交互代码」。
RSC 支持边算边发(streaming)。结合 <Suspense>,服务端可以先用 fallback 占位,待某个异步 Server Component 就绪后再把这段补发到同一个流里,浏览器增量拼接。这正是 14-React 19 新特性概览 中 use(promise) 在服务端的落地基础。
RSC 是 React 的模型规范,具体路由、缓存、打包由框架实现(如 Next.js App Router)。React 本身不提供文件系统路由,因此 RSC 的工程化部署请参考本站 Next.js 分类。
RSC 的核心是「用序列化协议替换 HTML,用指令划定服务端/客户端边界,用流式渲染衔接 Suspense」。它让取数逻辑留在服务端,客户端 bundle 大幅瘦身。