从ReactJS中的Child访问父类方法

时间:2016-04-06 06:20:02

标签: javascript reactjs

我有一个小问题,我有父类和子类。我想修改在父类中初始化的状态,以便我可以在父类中看到更新的状态。这是代码:

var Parent = React.createClass({
    getInitialState: function(){
        return{
           my_value: 0
        }
    },

    _increaseValue: function(){
        this.state.my_value++;
    },

    render: function(){
        return(
            <div><Child /></div>
        )
    }
});

var Child = React.createClass({
    render: function(){
        //at button I want to access _increaseValue function of parent
        return (
            <div>
                 <button onClick={_increaseValue}>Increase</button>
            </div>
        );
    }
});

现在当用户点击子类中的按钮时,我希望在父类中获得更新的my_value,因此我的问题是:

  1. 有可能吗?
  2. 如果是,那该怎么办?
  3. 这是好的做法还是没有?

2 个答案:

答案 0 :(得分:2)

  1.   

    有可能吗?

    是的,有可能

  2.   

    如果是,那怎么办?

    您可以通过props将父方法传递给子级,就像这样

    var Parent = React.createClass({
      getInitialState: function(){
        return {
          my_value: 0
        }
      },
    
      onChangeValue: function () {
        var value = this.state.my_value + 1;
    
        this.setState({
          my_value: value
        })
      },
    
      render: function() {
        return <div>
          <Child 
            onChangeValue={ this.onChangeValue } 
            value={ this.state.my_value } 
          />
        </div>;
      }
    });
    
    var Child = React.createClass({
      _handleClick: function(){
        this.props.onChangeValue();
      },
    
      render: function(){
        return <div>
          <h1> { this.props.value  } </h1>
          <button onClick={ this._handleClick }>Increase</button>
        </div>
      }
    });
    

    Example

  3.   

    这是好的做法还是没有?

    这是一种很好的做法

答案 1 :(得分:0)

您需要通过道具将功能传递到您的子组件中。当你需要改变时,你可以调用此功能。这是正常的做法和反应方式。

示例:

var Parent = React.createClass({
    getInitialState: function(){
        return{
           my_value: 0
        }
    },

    onChildClick: function() {
        this.setState({
          my_value: this.state.my_value + 1
        })
    },

    render: function(){
        return(
            <div>
              {this.state.my_value}
              <Child onClick={this.onChildClick.bind(this)}/>
            </div>
        )
    }
});

var Child = React.createClass({
    _handleClick: function(){
        this.props.onClick();
    },

    render: function(){
        return (
            <div>
                 <button onClick={this._handleClick}>Increase</button>
            </div>
        );
    }
});

Example on JSFiddle