https://overreacted.io/jsx-over-the-wire/
这是一篇 RSC 布道文章,详细阐述了 RSC 的真实面貌和预期想要解决的问题。
BFF:随着视图的不断演进,后端 API 提供的资源会和视图需要的差异越来越大。前端会使用 BFF 来解决后端提供的接口与前端视图之前的巨大差异,加载多个后端资源然后产出成视图真正需要的样子,视图层再真正调用并传递给组件进行渲染。
BFF API 与实际 Client 视图之间终究还是分裂的,让 BFF 告诉视图需要展示什么组件,然后直接把数据作为 Props 传递给 Client 会不会更好?这就是 RSC。RSC 在服务端返回 JSX 实际会是一串 JSON,如果 JSX 引用的组件是 use client
,那么 JSON 只包含其路径,到了浏览器再通过其他方式载入(例如引入 Script)。如果 JSX 引用的组件是 RSC,那么就直接调用得到结果。
所以 RSC 适合的场景应该是后端的资源深度干涉前端渲染结果的场景,例如首屏存在多种呈现形式,当前的呈现完全由当前用户的信息和历史行为决定。这种场景需要前后端深度融合,UI 演进会变得困难,因为牵一发动全身。BFF 可以减少前后端之间的耦合,让后端专注于提供资源,前端专注于掌控策略和视图;RSC 更进一步,让 Client 的渲染结果可以直接受控,而不是依赖于 API 请求的间接受控。