我正在阅读React facebook的文档,there写的是
组件接收新道具时调用。这种方法不是 要求初始渲染。
但后来在this链接中,已经解释过,即使道具相同,也会调用此方法,因为道具可以是引用,并且这些引用的数据可能不同。
所以,我的问题是每次收到新道具时都会调用它。
答案 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在评论中所建议的那样:
是肯定的。每当组件可能会收到新的道具时,它就会被调用。它不会在初始渲染上被调用