高阶组件是一个函数,接收一个组件作为参数,返回一个新的增强版组件。HOC 的本质是在组件外层包裹一层"容器",通过 Props 注入、生命周期拦截或渲染控制来实现逻辑复用。常见应用场景包括:鉴权检查、日志记录、错误边界包装等。
自定义 Hook 是一个以 use 开头的 JavaScript 函数,内部可以调用其他 Hooks(如 useState、useEffect),将组件逻辑提取为可复用的独立函数。自定义 Hook 不创建额外的组件层级,逻辑直接在调用它的组件内部执行。
特性 | 高阶组件(HOC) | 自定义 Hooks |
|---|---|---|
实现方式 | 函数接收组件,返回新组件 | 函数调用 Hooks,返回状态或方法 |
组件树影响 | 增加组件层级(包装地狱) | 不增加组件层级 |
逻辑复用方式 | 通过包裹增强组件能力 | 通过调用函数复用状态逻辑 |
Props 传递 | 可能出现 Props 命名冲突 | 调用者自行命名返回值,无冲突 |
调试体验 | 组件树中显示多层包裹结构 | 组件树扁平,调试更清晰 |
适用组件类型 | 函数组件和类组件均可 | 仅限函数组件 |
React 官方和社区在 2025-2026 年的明确推荐是:优先使用自定义 Hooks 进行逻辑复用,HOC 仅用于特定场景(如需要包裹错误边界、需要兼容旧版类组件、第三方库要求使用 HOC 模式)。
componentDidCatch,需通过 HOC 包装实现connect())仍采用 HOC 模式