6、react高阶组件HOC

高级组件概念:

为了提⾼组件复⽤率,可测试性,就要保证组件功能单⼀性;

但是 若要满⾜复杂需求就要扩展功能单⼀的组件,在React⾥就有了 HOC(Higher-Order Components)的概念,

定义:⾼阶组件是⼀个⼯⼚函数,它接收⼀个组件并返回另⼀个组 件。

 1 import React from 'react';
 2 import './App.css';
 3 import Home from './pages/Home';
 4 
 5 
 6 function Child(props){
 7   return <div>Child</div>
 8 }
 9 
10 const foo=Cmp=> props=>{
11   return(
12   <div style={{border:'solid 1px red'}}>
13     <Cmp {...props} />
14   </div>)
15 }
16 
17 function App() { 
18   const Foo = foo(Child)
19   return (
20     <div className="App">
21     <Child></Child>
22       <Foo />
23       {/* <Home /> */}
24     </div>
25   );
26 }
27 
28 export default App;

高阶组件可以实现链式调用,不过不推荐实际使用,基于上面代码

 1 const foo2=Cmp=> props=>{
 2   return(
 3   <div style={{border:'solid 1px orange', padding:'10px'}}>
 4     <Cmp {...props} />
 5   </div>)
 6 }
 7 
 8 function App() { 
 9   const Foo = foo2(foo(Child))
10   return (
11     <div className="App">
12     <Child></Child>
13       <Foo />
14       {/* <Home /> */}
15     </div>
16   );
17 }

 Hoc使用装饰器,装饰器配置可以参考https://www.cnblogs.com/nothingness/p/13620129.html

 1 import React,{Component} from 'react'
 2 
 3 const foo= Cmp=>props=>{
 4     return(
 5         <div className='border'>
 6            <Cmp {...props}/>
 7         </div>
 8     )
 9 }
10 
11 @foo //装饰器方法要写在使用的对象上面
12 class Child extends Component{
13     render(){
14         return <div>Child</div>
15     }
16 }
17 
18 
19 class HocHooks extends Component{
20     render(){
21         // const Foo = Child;
22         return(
23             <div>
24                 <h1>hello HocHook</h1>
25                 <Child />
26             </div>
27         )
28     }
29 }
30 export default HocHooks;

 

posted @ 2020-09-02 22:38  雪糕战士  阅读(197)  评论(0编辑  收藏  举报