每次收到道具时都会运行componentWillRecieveProps

时间:2016-03-15 12:51:54

标签: html reactjs

我正在阅读React facebook的文档,there写的是

  

组件接收新道具时调用。这种方法不是   要求初始渲染。

但后来在this链接中,已经解释过,即使道具相同,也会调用此方法,因为道具可以是引用,并且这些引用的数据可能不同。

所以,我的问题是每次收到新道具时都会调用它。

2 个答案:

答案 0 :(得分:7)

初始渲染意味着第一次使用它拥有的任何数据加载组件。 E.g:

Parent
    constructor() {
            super();
            this.state = {
                viewData:undefined,
            };
    componentDidMount(){
      let myData = yourStore.getData();
      this.setState({viewData:myData})
    }
    updateView(){
     let myData = yourStore.getData();
      this.setState({viewData:myData})
    }


render() 
   {
    return(
      <div>
         {
      this.state.viewData && this.state.viewData.map(function (obj, index) {
        return <childComponenet data={obj} key={index}/>
       })
        }       
      </div>
     <button onClick={this.updateView.bind(this)>Update</button>}
     )
}

<强> ChildComponent:

constructor() {
        super();
        this.state = {
            childData:this.props.data
            }
        };

//componentDidMount(){
  //this.setState({childData:this.props.data}) }

componentWillReceiveProps(newProps){
   this.setState({childData:newProps.data})//this method will not get called first time
}

render(){
   return(
   <span>{this.state.childData}</span>
   )
}

构造函数只初始化一次。因此,当第一次渲染子组件时,它将设置state变量。现在,当您单击父组件中的更新状态时,state会更新,它会将更新的state作为props传递给子组件。在这种情况下,将调用componentWillReceiveProps方法并更新子组件状态。

注意:componentWillReceiveProps不检查props的内部值。这意味着即使前一个和当前的道具是相同的,它也会在行动中。因此答案是。每当它从父母那里收到新道具时,它就会被调用。

答案 1 :(得分:1)

正如Brandon在评论中所建议的那样:

  

是肯定的。每当组件可能会收到新的道具时,它就会被调用。它不会在初始渲染上被调用