zoukankan      html  css  js  c++  java
  • react第七单元(组件的高级用法-组件的组合(children的用法)-高阶组件-封装组件)

    第七单元(组件的高级用法-组件的组合(children的用法)-高阶组件-封装组件)

    #受控组件

    简而言之,就是受到状态state控制的表单,表单的值改变则state值也改变,受控组件必须要搭配onchange方法,否则不能使用

    class App extends Component{
      state={
        text:''
      }
      control=(e)=>{
        this.setState({text:e.target.value})
      }
      render(){
        const{text} = this.state;
        return <div>
          <input type="text" value={text} onChange={(e)=>{this.control(e)}}/>
          <p>{text}</p>
        </div>
      }
    }
    export default App
    
     

    #高阶组件

    #1 首先回顾一下什么是高阶函数

    高阶函数是一个函数,它接收函数作为参数或将函数作为输出返回。

    function a( functionName ){
        functionName()
    }
    
    function b(){
        console.log('b')
    }
    
     a(b)
    
    // a为一个高阶函数
    
     
    #2 高阶组件

    高阶组件是一个组件,它接收组件作为参数,并将组件作为输出返回

    
    class Small extends Component{
      render(){
        return <h1>{this.props.text}</h1>
      }
    }
    
    //高阶组件
    function High(Group){
      class Height extends Component{
        render(){
          return <div>
                  <Group {...this.props}/>
          </div>
        }
      }
      return Height
    }
    //此时的small 经过进化已经不是原来的Small组件了
    Small = High(Small);
    
    class App extends Component{
      state={
        text:'高阶组件'
      }
      render(){
        return <div>
          <Small text={text}/>
        </div>
      }
    }
    
    
     

    #children

    在组件传值时,不光可以传递变量,函数,也可以传递标签,通常我们使用两种方式传递标签: 1 通过属性传递标签,子组件接收时使用this.props

    class Text extends Component{
      render(){
        return <div>{this.props.hHtml}</div>
      }
    }
    
    class App extends Component{
      render(){
        return <div>
            <Text hHtml={<h1>helloworld</h1>}/>
        </div>
      }
    }
    
     

    2 将组件写成双标签,包住要传递的标签,子组件接收时使用this.props.children

    class Text extends Component{
      render(){
        return <div>{this.props.children}</div>
      }
    }
    
    class App extends Component{
      render(){
        return <div>
            <Text>
                <h1>helloworld</h1>
            </Text>
        </div>
      }
    }
  • 相关阅读:
    【工作总结】工作三年半的不归路,希望新人借鉴
    【OpenWRT】【RT5350】【三】MakeFile文件编写规则和OpenWRT驱动开发步骤
    【OpenWRT】【RT5350】【二】烧写OpenWrt到RT5350开发板
    【OpenWRT】【RT5350】【一】OpenWrt开发环境搭建
    2013总结
    [原创]cocos2dx加载网络图片&异步加载图片
    json 对c++类的序列化(自动生成代码)
    [奇思幻想] 开发过程中的一些设想记录中(持续更新....)
    GNU Makefile编写
    c语言到汇编的学习
  • 原文地址:https://www.cnblogs.com/yzy521/p/14131754.html
Copyright © 2011-2022 走看看