添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

高阶组件的定义

高阶组件(Higher-Order Component)是一个函数,以下简称 HOC,接受一个组件,返回一个新组件。

const EnhancedComponent = higherOrderComponent(WrappedComponent);

HOC 不应该修改传入组件,而应该使用组合的方式,通过将组件包装在容器组件中实现功能:

1
2
3
4
5
6
7
8
9
10
11
12
13
import React, { Component } from "react";

export default function higherOrderComponent(WrappedComponent) {
return class HOCComponent extends React.Component {
componentDidUpdate(prevProps) {
console.log("Current props: ", this.props);
console.log("Previous props: ", prevProps);
}
render() {
return <WrappedComponent {...this.props} />;
}
};
}

高阶组件不是只能接收一个参数,它也可以接收多个参数。项目中通常使用的 React Redux 的 connect 函数,它的 HOC 签名是这样的:
const ConnectedComment = connect(commentSelector, commentActions)(CommentList);

这样的用法实现方式大概类似以下代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import React, { Component } from 'react'

function HOCFunction = (param) => (WrappedComponent) => {
return class HOCComponent extends Component {
componentWillMount() {
console.log('通用逻辑', param)
}

render() {
return <WrappedComponent data={this.state.data} {...this.props} />
}
}
}

class MyComponent1 extends Component {
render() {
return <div>{this.props.data}</div>
}

//省略其他逻辑...
}

const resultComponent = HOCFunction('param1 test')(MyComponent1);

高阶组件(HOC) 使用场景