• 高阶组件(2018/12/18)


    一、高阶组件
              ①接收一个组件返回一个增强性的组件
            高阶组件其实是一个函数,这个函数接收一个参数,这个参数是一个组件,返回值是一个增强性的组件
    component/list/header.js  //①这是新建一个组件
    import React,{Component} from 'react'
     
    class Header extends Component{
        render(){
            return(
     
                <div>
                    header
                </div>
                )
        }
    }
    export default Header
     
    component/list/list.js
    import React,{Component} from 'react'
    import Header from "./header"   //② 在原有的组件中引入这个组件
     
    let Hoc =(Com)=> //③写一个函数,这个函数中带一个参数是一个组件 ,相当于一个将要被替换掉的模板
        class Text extends Component{  
            render(){
                return(
                    <div>
                        <p>这是一个高阶组件</p>
                        <Com/>  
                    </div>
                    )
            }
        }
        return Text
    }
     
    let Hi =Hoc(Header)  //④ 再写一个函数,将模板Hoc中的参数写成想要的组件名
    class List extends Component{
        render(){
            return(
     
                <div>
                    <Hi/>  //⑤ 将这个组件渲染到页面上  
                </div>
                )
        }
    }
    export default List
     
        ②属性代理:实现组件的复用性    //就是我写一个组件,我想在什么组件中使用就将这个组件引入到那个组件中去,利用高阶组件的概念进行渲染
    header.js   //这就相当于一个组件模板,需要的时候引入就可以,数据可以在高阶组件中进行修改
    import React,{Component} from 'react'
     
    class Header extends Component{
        render(){
            let {imgs}= this.props
            return(
     
            <div className="swiper-container">
                <div className="swiper-wrapper">
                   {
                    imgs.map((item,index)=>{
                           return  <div className="swiper-slide" key={index}>
                                <img src={item}/>
                           </div>
                       })
                   }
                </div>
            </div>
                )
        }
    }
    export default Header
     
    list.js
     
    import React,{Component} from 'react'
    import Header from "./header"
     
    let Hoc =(Com)=>{
        class Text extends Component{
            constructor(){  //当不同的高阶组件需要不同的数据时可以在这里修改
                super();
                this.state={
                    arr:[
                           "https://www.swiper.com.cn/demo/slow-transition/img/picture-1.jpg",
                        "https://www.swiper.com.cn/demo/slow-transition/img/picture-2.jpg",
                        "https://www.swiper.com.cn/demo/slow-transition/img/picture-3.jpg"
                    ]
                }
            }
            render(){
                let {arr} = this.state
                return(
                    <div>                    
                        <Com imgs={arr}/>
                    </div>
                    )
            }
        }
        return Text
    }
    let Hi =Hoc(Header)
    class List extends Component{
        render(){
            return(
     
                <div>
                    <Hi/>
                </div>
                )
        }
    }
    export default List
     
     
    ③  反向集成 :渲染劫持
        根据条件来渲染不同的组件或数据
    list.js
    import React,{Component} from 'react'
    import Header from "./header"
     
    let Hoc =(params)=>(Com)=>{
        class Text extends Component{
            constructor(){
                super();
                this.state={
                    arr:[
                           "https://www.swiper.com.cn/demo/slow-transition/img/picture-1.jpg",
                        "https://www.swiper.com.cn/demo/slow-transition/img/picture-2.jpg",
                        "https://www.swiper.com.cn/demo/slow-transition/img/picture-3.jpg"
                    ]
                }
            }
            render(){
                let {arr} = this.state
                return(
                                    
                        params?<Com imgs={arr}/>:<p>请登录</p>   //这里是一个三目运算,根据条件的不同来渲染不同的组件
                    
                    )
            }
        }
        return Text
    }
    let Hi =Hoc(false)(Header)  //这里的第一个参数是params中的值
    class List extends Component{
        render(){
            return(
     
                <div>
                    <Hi/>
                </div>
                )
        }
    }
    export default List
  • 相关阅读:
    设计模式的征途—4.抽象工厂(Abstract Factory)模式
    设计模式的征途—10.装饰(Decorator)模式
    设计模式的征途—1.单例(Singleton)模式
    设计模式的征途—5.原型(Prototype)模式
    设计模式的征途—6.建造者(Builder)模式
    OOAD利器之UML基础
    设计模式的征途—8.桥接(Bridge)模式
    设计模式的征途—3.工厂方法(Factory Method)模式
    设计模式的征途—2.简单工厂(Simple Factory)模式
    设计模式的征途—7.适配器(Adapter)模式
  • 原文地址:https://www.cnblogs.com/zsrTaki/p/11510869.html
Copyright © 2020-2023  润新知