53 lines
1.4 KiB
Markdown
53 lines
1.4 KiB
Markdown
---
|
||
title: Higher-Order Components
|
||
localeTitle: 高阶组件
|
||
---
|
||
## 高阶组件
|
||
|
||
在React中, **高阶组件** (HOC)是一个获取组件并返回新组件的函数。程序员使用HOC来实现**组件逻辑重用** 。
|
||
|
||
如果您使用过Redux的`connect` ,那么您已经使用过高阶组件。
|
||
|
||
核心思想是:
|
||
|
||
```jsx
|
||
const EnhancedComponent = enhance(WrappedComponent);
|
||
```
|
||
|
||
哪里:
|
||
|
||
* `enhance`是高阶分量;
|
||
* `WrappedComponent`是您要增强的组件;和
|
||
* `EnhancedComponent`是创建的新组件。
|
||
|
||
这可能是`enhance` HOC的主体:
|
||
|
||
```jsx
|
||
function enhance(WrappedComponent) {
|
||
return class extends React.Component {
|
||
render() {
|
||
const extraProp = 'This is an injected prop!';
|
||
return (
|
||
<div className="Wrapper">
|
||
<WrappedComponent
|
||
{...this.props}
|
||
extraProp={extraProp}
|
||
/>
|
||
</div>
|
||
);
|
||
}
|
||
}
|
||
}
|
||
```
|
||
|
||
在这种情况下, `enhance`返回一个扩展`React.Component`的**匿名类** 。这个新组件做了三件简单的事情:
|
||
|
||
* 在`div`元素中渲染`WrappedComponent` ;
|
||
* 将自己的道具传递给`WrappedComponent` ;和
|
||
* 向`WrappedComponent`注入额外的prop。
|
||
|
||
HOC只是一种利用React组成性质的力量的模式。 **他们为组件添加功能** 。你可以用它们做更多的事情!
|
||
|
||
## 其他资源
|
||
|
||
* [反应文档:高阶组件](https://reactjs.org/docs/higher-order-components.html) |