高阶组件(HOC)是React中复用逻辑的设计模式,本质为接收组件并返回增强组件的函数;用于状态复用、行为增强、props注入和渲染劫持,但需注意ref转发与displayName设置。
JavaScript 中本身没有“高阶组件”(Higher-Order Component,HOC)这个原生概念——它是 React 生态中基于函数式编程思想提出的一种模式,本质是一个接收组件并返回新组件的函数。它不是语法特性,而是约定俗成的设计模式。
核心就是:函数入参是 React 组件(可以是函数组件或类组件),返回一个新的、增强过的组件。
function withLoading(WrappedComponent) {
return function EnhancedComponent(
props) {
if (props.isLoading) {
return Loading...;
}
return ;
};
}
React.forwardRef),否则父组件拿不到原始组件的 ref;EnhancedComponent.displayName = `withLoading(${getDisplayName(WrappedComponent)})`。HOC 的核心价值是复用组件逻辑,尤其适合横切关注点(cross-cutting concerns)——那些不直接属于 UI 渲染、但多个组件都需要的功能。
React 16.8 推出自定义 Hook 后,很多原本用 HOC 实现的逻辑(比如数据获取、表单控制)现在更推荐用 Hook。两者关键差异:
基本上就这些。HOC 不复杂但容易忽略细节,用得克制、命名清晰、做好类型和 ref 支持,它仍是 React 工程中值得掌握的实用模式。