Next.js / React 的服务端与客户端边界
先理解原理和示例,再练习完整口述与追问。
回答要点
SSR 不等于 Server Components;水合一致;缓存按版本明确。
原理拆解
SSR 在服务端为一次请求生成 HTML,Hydration 在客户端把交互与已有标记对接;Server Components 是另一条组件执行边界和数据传输协议,能在服务端执行某些组件逻辑并减少下发相应客户端代码,但不是 SSR 的简单改名。Client Component 在相关框架中也可能参与服务器预渲染,所以 use client 不能理解为“它绝对不会在服务端运行”。
示例与推演
商品介绍和数据库读取可以放服务端执行的组件,交互收藏按钮由客户端组件负责;机密访问保留在服务器。客户端初次展示与服务端输出要一致,随机值、时区或直接读取浏览器存储可能造成水合不匹配。React19 的 Actions、use 等需结合框架支持和项目版本,不可直接套到 React17。
易错点
不要把所有交互组件都改成服务端组件,也不要通过屏蔽水合警告代替修复。跨边界传递的数据必须满足框架协议且不泄露服务端秘密。
参考回答可直接练习口述
SSR 生成 HTML,水合为交互绑定客户端逻辑;Server Components 在服务端环境执行并向应用提供可组合结果,客户端组件也可能参与服务端预渲染。密钥和数据库依赖留在服务端,初次输出避免随机数和浏览器专有状态。数据获取和缓存是应用框架、路由模式与版本的能力,不能背成所有 Next.js 请求默认永久缓存;面试先声明环境,再解释实际选择的缓存键、时效、失效和用户隔离。