ComponentWillReceiveProps未触发

时间:2018-03-08 14:08:35

标签: reactjs react-redux

我是React世界的新手。我在编辑操作时遇到了生命周期方法。

即使更改道具,也不会触发

componentWillReceiveProps方法。

这是我的代码示例。

      this.intialState = {
                      name:'',
                      code:'',
                      };
    this.state = this.intialState;




  componentWillReceiveProps(nextprops){
      this.setState({
        name:nextprops.KaraikarEdit.name,
        code:nextprops.KaraikarEdit.code
     })
    }



render() {


 return (
                <div className="form-group">
                <input type= "text"  className="form-control" value={this.state.name}  placeholder="Enter Name" name="name"   onChange = {this.onhandleChange} />
                </div>

                <div className="form-group">
                <input type= "text"  className="form-control" value={this.state.code}  placeholder="Enter Code" name="code"   onChange = {this.onhandleChange} />
                </div>

);
}

 const mapStateToProps = (state) => {
    return {

             KaraikarEdit: state.KaraikarDetails.editdata
         }
  }


export default connect(mapStateToProps)(KaraikarMasterAdd);

我在KaraikarEdit收到了newprops。但是不会触发componentWillReceiveProps生命周期方法。

我知道在第一次渲染时没有调用componentWillReceiveProps。所以我使用了componentDidMount方法,在这个方法中我调度了一个对这个组件没用的动作。然后componentWillReceiveProps工作。

我应该使用componentDidMount或componentWillMount方法来使用componentReceiveProps方法吗?如果是的话,在componentDidMount方法中包含哪些内容?

1 个答案:

答案 0 :(得分:0)

如果要在安装时设置组件state,则应使用componentDidMount。在初始渲染时未调用componentWillReceiveProps。然后,为了处理更新,您可能希望在呈现更新的标记之前使用componentWillUpdate来设置新状态(因为它基于组件状态)。

但是!正如我在您的方法中看到的那样 - 您不必要地将存储状态复制到组件状态。 您可以在this.props函数中使用render在此方法中,您的实施中不需要componentWillReceiveProps