javascript - React.js - componentWillReceiveProps 被击中两次

标签 javascript reactjs

我有一个像这样呈现的 React.js 组件:

    <Social email={this.state.email} />;

页面上有一些事件会更新 this.state.email,结果会通过 render,发送一个新的 email prop 到 Social 组件。

在这个 Social 组件中,我正在监听这样的更新:

  componentWillReceiveProps: function(nextProps) {
    console.log('received props update', nextProps.email);
    this.doSomeWork();
  }

该控制台行被渲染两次,这使得用户界面随着对社交网络的调用而闪烁两次。

我总是可以做这样的事情:

    if (nextProps.email != this.props.email) {
      this.doSomeWork();
    }

但感觉有点hacky...

是否需要双重信息?如果是这样,好奇为什么?

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

最佳答案

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

您可以在 Social 组件中实现 shouldComponentUpdate 方法以防止二次渲染:

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

关于javascript - React.js - componentWillReceiveProps 被击中两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27628504/

相关文章:

javascript - AngularJS 在函数中访问 $scope

javascript - 使用 jQuery 计算重复列表中的元素

JavaScript 使用数组附加文本

javascript - 在 React.js 中实现阅读更多链接

reactjs - Expo React 警告 : Can't perform a React state update on an unmounted component. 这是一个空操作,但它表明您的应用程序中存在内存泄漏

javascript - 如何使用 JavaScript 设置表单按钮(没有 id)的标题属性

javascript - Reactjs 设置背景图片

reactjs - 如何将包含 props 的对象传递给 React 组件?

reactjs - 找不到模块 : Can't resolve 'http2' when importing firebase-admin

javascript - 使用javascript将数据写入本地文本文件