#17
服务端组件 vs 客户端组件
Champ2025.12.18 16:20created at 2025.12.18 16:20updated at 2025.12.18 16:20
0 次阅读

NextJs中服务端组件和客户端组件的区别
服务端组件
- 在服务器上渲染成 HTML
- 渲染结果发送到客户端
- 适用于静态内容、数据获取
客户端组件
- 在浏览器中渲染
- 支持交互性、状态管理
- 可以访问浏览器 API
功能差异
| 功能 | 服务端组件 | 客户端组件 |
|---|---|---|
| 数据获取 | ✅ 支持 async/await | ❌ 不支持直接 async |
| 访问后端服务 | ✅ 直接访问数据库/API | ❌ 需要通过 API 路由 |
| 浏览器 API | ❌ 无法使用 | ✅ 可使用 window, document |
| 交互性 | ❌ 无事件处理 | ✅ 支持点击、输入等事件 |
| React 状态 | ❌ 不支持 | ✅ 支持 useState, useReducer |
| 生命周期 | ❌ 不支持 | ✅ 支持 useEffect, useLayoutEffect |
| Context | ❌ 无法创建 | ✅ 支持 React Context |
| 文件大小 | 🔽 更小(代码不发送到客户端) | 🔼 较大(包含客户端代码) |
服务端组件的优势:
- 更小的包体积:客户端不需要下载组件代码
- 更快的初始加载:直接发送渲染好的 HTML
- 更好的 SEO:内容在服务器端已经渲染
- 访问敏感数据更安全:API 密钥和数据库连接保留在服务器端
客户端组件的优势:
- 交互性强:支持用户交互
- 状态管理:可以管理本地状态
- 动态更新:无需重新加载即可更新 UI