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>
  }
}
posted @ 2020-12-14 10:09  人心不古  阅读(606)  评论(0编辑  收藏  举报