【翻译】React 服务端组件

【翻译】React 服务端组件
最新回答
我阅君心

2026-06-29 21:43:06

React Server Components(React 服务端组件)

本周,React 团队发布了零打包体积的 React 服务端组件(Server Components),旨在通过服务端驱动的心理模型实现现代化用户体验(UX)。这一特性与传统的服务器端渲染(SSR)存在本质差异,有望显著减少客户端 JavaScript 的打包体积。

一、服务端渲染的局限性

当前客户端 JavaScript 的服务器端渲染存在以下问题:

  • 水合(Hydration)延迟交互性:组件在服务端渲染为 HTML 后,仍需下载并解析 JavaScript 代码以实现交互性。
  • SSR 仅用于初始加载:水合后通常不再使用 SSR,且完全避免客户端水合会限制交互性。
  • 第三方包增加代码体积:例如使用 Markdown 渲染或日期格式化库会增大打包体积,影响性能。

React 服务端组件通过定期重新获取数据并限制发送到客户端的代码量,解决了这些问题。

二、服务端组件的核心优势

React 服务端组件与 SSR 互补,实现中间抽象格式渲染,无需添加到 JavaScript 打包结果中:

  • 状态保留与扩展性:在不损失状态的情况下合并服务器树与客户端树,支持更多组件。
  • 快速初始渲染:服务端组件生成客户端组件后,通过 SSR 基础架构渲染为 HTML,加速早期渲染。
  • 显著减少打包体积:早期探索表明,服务端组件可减少 18%-29% 的打包体积,未来基础设施完善后收益更清晰。
三、自动代码分割

服务端组件引入自动代码分割,优化客户端代码传输:

  • 传统代码分割的挑战:

    需手动使用 React.lazy() 或依赖元框架(如 Next.js)的启发式规则。

    可能延迟组件加载时间,影响用户体验。

  • 服务端组件的改进:

    将客户端组件的正常导入视为代码分割点。

    允许在服务器端提前选择组件,使客户端更早获取所需代码。

四、服务端组件与 Next.js SSR 的区别

服务端组件不会取代 Next.js 的 SSR,二者定位不同:

  • 代码传输:服务端组件的代码不会发送到客户端,而 Next.js SSR 的组件代码会通过 JavaScript 包传输。
  • 后端访问:服务端组件可从树的任意位置访问后端,而 Next.js 的 getServerProps() 仅限于顶层页面。
  • 状态保持与重新获取:服务端组件支持部分重新获取(如搜索结果列表),同时保留树内状态(如搜索输入文本)。

早期集成将通过 webpack 插件实现:

  • 定位客户端组件并创建分块 URL 映射。
  • 使用 Node.js 加载器替换客户端组件导入引用。

五、学习资源与反馈
  • 演讲与文档:观看
    Dan 和 Lauren 的演讲
    ,阅读
    RFC 文档
    。
  • 演示代码:体验
    服务端组件演示项目
    。
  • 反馈渠道:向 React 团队(Sebastian Markbåge、Lauren Tan、Joseph Savona、Dan Abramov)提交反馈。

总结:React 服务端组件通过服务端驱动的渲染模型,优化了代码分割与状态管理,为现代化 Web 应用开发提供了新范式。尽管尚未用于生产环境,但其潜力值得持续关注。