SSR、Hydration、Server Components、React 19 新能力怎么区分?

先理解原理和示例,再练习完整口述与追问。

SSR 生成 HTML,水合使交互组件接管已有结构;Server Components 在独立服务端环境执行并产生可供客户端组合的输出,可与 SSR 配合,不能简单等同。客户端组件也可能参与服务端预渲染。

React 19 方向可按 JD 补 use、Actions、useActionState、useOptimistic 和 ref 的变化。服务端函数仍需鉴权、参数校验和错误处理;标记为服务端执行不代表自动安全。React 19 官方介绍

SSR 在服务端为一次请求生成 HTML,Hydration 在客户端把交互与已有标记对接;Server Components 是另一条组件执行边界和数据传输协议,能在服务端执行某些组件逻辑并减少下发相应客户端代码,但不是 SSR 的简单改名。Client Component 在相关框架中也可能参与服务器预渲染,所以 use client 不能理解为“它绝对不会在服务端运行”。

商品介绍和数据库读取可以放服务端执行的组件,交互收藏按钮由客户端组件负责;机密访问保留在服务器。客户端初次展示与服务端输出要一致,随机值、时区或直接读取浏览器存储可能造成水合不匹配。React19 的 Actions、use 等需结合框架支持和项目版本,不可直接套到 React17。

不要把所有交互组件都改成服务端组件,也不要通过屏蔽水合警告代替修复。跨边界传递的数据必须满足框架协议且不泄露服务端秘密。

SSR 先生成 HTML,Hydration 让客户端把交互接到已有结构上,服务端和客户端初次输出应一致。Server Components 在独立服务端环境执行,把结果交给应用组合,代码本身不进入对应客户端包;它可以与 SSR 配合,但不是同义词。use client 定义客户端模块边界,这些组件仍可能参与服务器预渲染。React19 可继续准备 use、Actions 和乐观状态,但真实写操作都必须校验权限。

面试官可能继续问追问与完整解答展开收起

哪些代码不能进入客户端包?水合不一致如何定位?use client 标识的是模块边界,为什么不等于“完全不在服务端渲染”?React 官方 Server Components

密钥、数据库连接和仅服务端依赖不能进入客户端模块边界。水合差异先查随机数、当前时间、时区、非法 HTML 和浏览器独有状态,保持初始输出一致后再客户端更新。use client 表示需要客户端能力及其依赖边界,不代表只在浏览器执行或自动关闭 SSR。