为什么需要区分服务端/客户端组件
Next.js 14 App Router 默认所有组件都是服务端组件,仅在添加 "use client" 后才成为客户端组件。这一设计让首屏 HTML 直出成为可能,但也带来了边界划分的挑战。
三条核心规则
1. 服务端组件不能向 DOM 元素传递事件处理器;2. 客户端组件不能直接调用 Node.js API(如 fs);3. 需要交互时,将交互部分拆分为独立的客户端组件。
实战模式:服务端取数 + 客户端交互
以表单页为例:服务端组件负责从数据库获取初始数据,客户端组件负责表单状态与提交。两者通过 props 传递纯数据,避免跨越边界传递函数。