我有一个像这样呈现的React.js组件:
<Social email={this.state.email} />;
网页上有一些更新this.state.email
的事件,因此,请通过渲染,向email
组件发送新的Social
道具。
在这个Social
组件中,我正在收听如下更新:
componentWillReceiveProps: function(nextProps) {
console.log('received props update', nextProps.email);
this.doSomeWork();
}
该控制台行被渲染两次,这使得UI闪存两次以及调用社交网络。
我总是可以这样做:
if (nextProps.email != this.props.email) {
this.doSomeWork();
}
但感觉有点hacky ......
预期会发出双重消息吗?如果是这样,好奇为什么?
如果没有,那么追踪和消除它的最佳方法是什么?
答案 0 :(得分:17)
您的Social
组件可能会被渲染两次,因为在父组件上调用setState
两次。可能是设置email
以外的属性,但调用了渲染函数,因此Social
组件呈现两次。
您可以在shouldComponentUpdate
组件中实施Social
方法以防止第二次呈现:
shouldComponentUpdate: function(nextProps, nextState) {
return nextProps.email != this.props.email;
}