React.js - componentWillReceiveProps被击中两次

时间:2014-12-23 21:48:31

标签: javascript reactjs

我有一个像这样呈现的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 ......

预期会发出双重消息吗?如果是这样,好奇为什么?

如果没有,那么追踪和消除它的最佳方法是什么?

1 个答案:

答案 0 :(得分:17)

您的Social组件可能会被渲染两次,因为在父组件上调用setState两次。可能是设置email以外的属性,但调用了渲染函数,因此Social组件呈现两次。

您可以在shouldComponentUpdate组件中实施Social方法以防止第二次呈现:

shouldComponentUpdate: function(nextProps, nextState) {
    return nextProps.email != this.props.email;
}