1. 高阶函数的定义
至少满足下列条件之一:
- 接受一个或多个函数作为输入;
- 输出一个函数
2. 高阶组件的定义
接受一个组件为参数,返回值为一个新的组件的函数,形如:
function enhanceComponent(WrapperComponent){
class NewComponent extend PurComponent{
render(){
return <WrapperComponent {...this.props}/>
}
}
NewComponent.dispalyName = 'Hoc'; //重命名用于在调试时显示
return NewComponent
}
3. 反向继承
就是让新的组件继承自传进来的组件,这种做法react官方页不推荐。嵌套层级太深是一种灾难!
我们强烈建议你不要创建自己的组件基类。 在 React 组件中,代码重用的主要方式是组合而不是继承。
function enhanceComponent(WrapperComponent){
class NewComponent extend WrapperComponent{
render(){
return super.render()
}
}
NewComponent.dispalyName = 'Hoc'; //重命名用于在调试时显示
return NewComponent
}
缺点:
因为HOC可以劫持props,在不遵守约定的情况下,可能会造成冲突。