• 高阶组件(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
  • 相关阅读:
    stack, deque 和 queue的对比
    Android 修改圆形progressBar颜色
    java.lang.OutOfMemoryError: Failed to allocate a 3110419 byte allocation with 741152 free bytes and
    Android GreenDAO 3.0 不修改版本号的情况下增加、删除表、添加字段
    Android监听安装卸载
    Android实现异步的几种方法
    Android GreenDao清空数据库的方法
    Android 6.0 动态权限申请
    Android无需权限显示悬浮窗
    Android 极光推送JPush---自定义提示音
  • 原文地址:https://www.cnblogs.com/zsrTaki/p/11510869.html
Copyright © 2020-2023  润新知