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)
|