zoukankan      html  css  js  c++  java
  • [React] Higher Order Components (replaces Mixins)

    Higher order components will allow you to apply behaviors to multiple React components.

    So the idea is to create a high order component, then use this hight order component to create multi same behaivor component. 

    So high order function is insdie function return another function, the same, high order component is inside component return another component.

    let Mixin = InnerComponent => class extends React.Component {
      constructor(){
        super();
        this.state = {val: 0}
      }
      update(){
        this.setState({val: this.state.val + 1})
      }
      componentWillMount(){
        console.log('will mount')
      }
      render(){
        return <InnerComponent
          update={this.update.bind(this)}
          {...this.state}
          {...this.props} />
      }
      componentDidMount(){
        console.log('mounted')
      }
    }

    Inside the Mixin Component, we define the behavior "update" which will be shared to the mixined components.

    Define two component: 

    const Button = (props) => <button
                                onClick={props.update}>
                                {props.txt} - {props.val}
                              </button>
    
    const Label = (props) => <label
                                onMouseMove={props.update}>
                                {props.txt} - {props.val}
                              </label>

    Mixin those two component with Mixin:

    let ButtonMixed = Mixin(Button)
    let LabelMixed = Mixin(Label)

    Use it:

    class App extends React.Component {
    
      render(){
        return (
          <div>
            <ButtonMixed txt="Button" />
            <LabelMixed txt="Label" />
          </div>
        );
      }
    
    }
    
    ReactDOM.render(<App />, document.getElementById('app'));

    ----- 

    let Mixin = InnerComponent => class extends React.Component {
      constructor(){
        super();
        this.state = {val: 0}
      }
      update(){
        this.setState({val: this.state.val + 1})
      }
      componentWillMount(){
        console.log('will mount')
      }
      render(){
        return <InnerComponent
          update={this.update.bind(this)}
          {...this.state}
          {...this.props} />
      }
      componentDidMount(){
        console.log('mounted')
      }
    }
    
    
    const Button = (props) => <button
                                onClick={props.update}>
                                {props.txt} - {props.val}
                              </button>
    
    const Label = (props) => <label
                                onMouseMove={props.update}>
                                {props.txt} - {props.val}
                              </label>
    
    let ButtonMixed = Mixin(Button)
    let LabelMixed = Mixin(Label)
    
    class App extends React.Component {
    
      render(){
        return (
          <div>
            <ButtonMixed txt="Button" />
            <LabelMixed txt="Label" />
          </div>
        );
      }
    
    }
    
    ReactDOM.render(<App />, document.getElementById('app'));
  • 相关阅读:
    Go语言判断一个字节的高位大于四
    Golang封装一个加锁的Map工具包
    解决往服务器传文件时权限不够问题
    git 服务器同步代码错误 error: insufficient permission for adding an object to repository database .git/objects
    动态调用WebService
    sql的一些使用小技巧整理【不定期更新】
    【雅思】【口语】保持健康的活动
    【雅思】【口语】advertisement--buy sth.
    【雅思】【口语】Teacher
    【python】python_接口自动化测试框架
  • 原文地址:https://www.cnblogs.com/Answer1215/p/5746248.html
Copyright © 2011-2022 走看看