高阶组件
1. 什么是高阶组件
高阶组件是一个函数。传递给它一个组件,返回一个新的组件。
const EnhancedComponent = enhance( MyComponent )enhance就是我们的高阶组件,在其中可以加入各种逻辑来增强我们的 MyComponent
2. 高阶组件的用途
代码复用
渲染劫持
抽象及操作state
操作props
3. 高阶组件的实现方式
属性代理 ( Props Proxy )
反向继承 ( Inheritance Inversion )
4. 属性代理 ( Props Proxy )
操作 props
高阶组件为被包裹组件添加了data属性,该属性的值为 localStorgae中key为locale的值,通过传入不同的参数key, 可以起到为组件初始化属性的作用。
获取 Refs 引用
通过属性代理拿到被包裹组件的实例引用this.childIns,从而可以调用被包裹组件实例上的方法。
抽象state
将被包裹组件的state抽象为自身的props,并从高阶组件中获得。常见的例子就是实现不受控组件到受控组件的转变。 参考 antd form 组件的实现.
用其它元素包裹
被包裹组件
通过在外面包裹一个带有样式的组件作为父组件,从而达到布局或者设置样式的目的。
5. 反向继承 ( Inheritance Inversion )
渲染劫持
渲染劫持即通过反向继承,在返回elementsTree之前,执行一些逻辑代码对elementsTree进行修改。来改变最终渲染在页面的内容。
操作state
在enhance内部,可以访问修改删除被包裹组件的 state。
6. 柯里化和高阶组件参数
6.1 柯里化
利用闭包,返回的函数addWith5始终能访问到5这个变量,通过这种方式分解函数的参数。
6.2 高阶组件参数
例如 react-redux中 connect的用法 connect(mapStateToProps,...)(WrapperComponent)
7. 链接
react高阶组件官方文档 React Higher Order Components in depth 张鑫旭 - JS中的柯里化 react.js 小书 高阶组件(HOC)-中文
Last updated
Was this helpful?