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