HOC、Render Props、自定义 Hook 三种复用模式怎么选?
三者都解决「逻辑复用」,各有取舍:
| 模式 | 优点 | 缺点 |
|---|---|---|
| HOC | 包裹清晰、可组合 | 嵌套地狱、props 来源不明、命名冲突 |
| Render Props | 灵活、状态可见 | JSX 嵌套深、回调难复用 |
| 自定义 Hook | 最简洁、无额外组件树、可传参 | 仅状态逻辑,UI 要自己写 |
结论:
- 纯状态/行为逻辑 → 自定义 Hook(首选)
- 需要把"渲染控制权"交给使用方 → Render Props
- 需要给组件加横向能力(如
withRouter)且无法改源码 → HOC(渐被 Hook 取代)
现代 React 项目基本用 Hook 替代 HOC/Render Props。