当前位置: 首页 > 知识库问答 >
问题:

反应js-组件将收到被击中两次的道具

哈沛
2023-03-14

我有一个React.js组件,它被渲染成这样:

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

页面上有一些事件更新了此。状态电子邮件,因此,执行render,它会向社交组件发送一封新的电子邮件道具。

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

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

控制台行被渲染两次,这使得UI在调用社交网络时闪烁两次。

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

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

但是感觉有点不舒服。。。

双重信息在意料之中吗?如果是这样,好奇为什么?

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

共有1个答案

韦安怡
2023-03-14

您的Social组件可能被渲染了两次,因为父组件上调用了两次setState。它可能设置的属性不是电子邮件,但是会调用渲染函数,因此社交组件渲染两次。

您可以在社交组件中实现acidComponentUpdate方法来防止二次渲染:

shouldComponentUpdate: function(nextProps, nextState) {
    return nextProps.email != this.props.email;
}
 类似资料:
  • 我的react组件的构造函数被调用了两次,但我不知道为什么。我正在使用react redux存储我的应用程序的语言。我有一个基于浏览器语言设置默认语言的函数。LoginPage是第一个获得render的组件,因此我在其构造函数中调用了我的函数。基本上,它所做的就是比较并分派一个动作。当我用redux开发工具检查我的状态时,我看到它被调度了两次。我在构造函数中打印了虚拟数据,它也打印了两次。 登录页

  • 所以就像标题所说的,我的应用程序的主页因为某种原因渲染了两次,我不知道为什么。从我的浏览器路由器,我最初调用一个JS文件,从那里我调用我的HomePage组件和React路由器,但然后我的页面渲染两次,我不知道为什么。 我的浏览器路由器(index.js): 然后pp.js被称为: 然后我的主页组件(index.jsx): 和路线。js: 但是我的页面是这样渲染的: 我真的很困惑,所以任何建议都会

  • 问题内容: 我有一个像这样呈现的React.js组件: 页面上有一些事件会更新,结果是经过渲染,这会将新的prop 发送到组件。 在此组件中,我正在侦听这样的更新: 该控制台行被渲染两次,这使UI两次闪烁,同时调用社交网络。 我总是可以做这样的事情: 但是感觉有点… 是否会出现双重消息?如果是这样,好奇为什么? 如果没有,找到并消除它的最佳方法是什么? 问题答案: 您的组件可能被渲染两次,因为在父

  • 这是父组件: 这是子组件: prop不会打印为子组件中的内容。 可能是什么问题?,已经在这个问题上很久了

  • 嗨,我有下面的代码给了我奇怪的行为 按钮cont_btn是bootstrap 2模式上的一个按钮。它包含一个继续按钮和一个关闭按钮。 如果我选择close按钮或单击modal外部以将其取消,然后重新打开modal,则函数将被调用两次。 我试过使用 并且我在 click不会被调用两次。在调试期间,我发现脚本重新进入 在页面加载中,我看到 但代码没有进入函数,它将跳到关闭按钮。我想这是正在初始化的两个

  • 我是个新手,所以不要用任何非技术性的词语。我有一个父组件,它在单击按钮时有一个按钮元素,调用一个函数来创建一个新对象。我想要的是,当用户单击这个按钮时,子组件应该呈现在父按钮元素下面,每次单击按钮时,新对象应该作为道具传递给子组件,以便它可以在屏幕上显示它,但以前调用的子组件应该保留在屏幕上。 从React导入; 类父母组件扩展反应。PureComponent{ }