React Server Components原理与优势
解释React Server Components(RSC)的核心概念、与客户端组件的关系、以及RSC如何解决传统React应用中的哪些问题(如捆绑包大小、数据获取瀑布流、安全等)。
回答
编译有声
React Server Components(RSC)
RSC是React 18引入的新组件类型,在服务端渲染,不发送JavaScript到客户端。
核心特性:
- 零客户端捆绑:服务端组件的代码不会打包到浏览器JS中,大幅减少包体积
- 直接访问后端资源:可直接读取数据库、文件系统、微服务(无需API层)
- 自动代码分割:服务端组件可自由导入客户端组件,自动形成分界
- 保持客户端交互性:服务端组件可嵌套客户端组件,保持交互能力
文件约定(Next.js App Router):
- 默认所有组件是Server Components
- 文件顶部加
'use client'声明为客户端组件
解决的问题:
- 减少Bundle Size:服务端组件依赖的库(如marked、moment)不发送到客户端
- 消除Waterfall:服务端一次性获取所有数据,避免客户端串行请求
- 提升首屏性能:HTML流式渲染,无需等待JS加载
- 增强安全性:敏感逻辑和后端token在服务端执行,不会暴露
限制:
- 无状态(不能使用useState、useEffect)
- 无事件处理(onClick等)
- 不能访问浏览器API(window、document)
- 不可在服务端组件中间接引用(import)客户端组件
RSC vs SSR: SSR在服务端生成HTML,但在客户端仍需加载并水合完整的React组件树和JS包。RSC则完全不发送服务端组件的JS到客户端。