当前位置: 首页 > 面试题库 >

在所有子代都更新之后,componentDidUpdate是否运行?

晁璞
2023-03-14
问题内容

我想知道React组件的生命周期方法componentDidUpdate是在所有子render方法完成之后还是在render调用该组件的方法之后立即执行的。

由于reconciler递归地调用rendermethod来更新视图,因此我有一种预感,componentDidUpdate在重新渲染组件的所有子代之后,该预感就会执行,但是文档中没有足够的信息。什么时候确切componentDidUpdate叫?


问题答案:

componentDidUpdate方法render在组件的方法完成执行后调用。这意味着将在所有儿童render方法均完成后调用该方法。您链接的文档中暗含了以下内容:

当组件已更新时 ,可借此机会在DOM上进行操作

该组件仅在渲染后才更新,因此文档暗示它是在所有子级(因此父级)完成了重新渲染之后调用的(尽管有点不清楚)。只有在DOM完成更新,子级以及所有操作后,您才能真正对DOM进行操作。

例如,假设我们有两个组件A并且BB渲染了一个A组件。componentDidUpdate对于B只会被调用一次Brender结束。在renderB后会完成Arender调用成功,因为孩子们第一次呈现,由于父母是一部分。这意味着您的问题的答案是:componentDidUpdate在所有孩子的render子句都完成之后执行。



 类似资料:
  • 问题内容: 我父母的渲染中有以下代码 以及下面我孩子图表中的代码 我以为仅在所有子项都加载后才调用父级的componentDidMount。但是在这里,父级的componentDidMount在子级的componentDidMount之前被调用。 这是工作方式吗?还是我做错了什么。 如果这是工作方式,我如何检测从父级加载所有子级组件的时间? 问题答案: 是的,孩子的称为父母之前的。 运行下面的代码

  • 我们的测试在一些目录中存储关于每个已执行测试的大量信息。如果同一次运行的所有结果都存储在一个以日期/id命名的目录中,这将是切实可行的。这样可以很容易地查看历史记录并跟踪是什么。目前这是一个手动作业,每次运行后都必须重命名输出目录以保留记录。 我们可以很容易地在cucumber之外编写脚本以实现自动化,但是我想知道这是否可以通过cucumber框架实现。一种简单的方法(如果可能的话)是创建一个ru

  • 问题内容: 在Firebase的数据库中,我需要更新open的值并将其传递给 所有子级的false。我如何用Java语言做到这一点?像这样 问题答案: Firebase数据库没有与SQL等效的数据库UPDATE messages SET open=false。 要更新Firebase中的节点,您必须首先具有对该特定节点的引用。为了获得对节点的引用,您必须知道该 节点的完整路径。 这意味着您首先需要

  • 问题内容: 我正在网站上运行ajax更新面板。更新面板将返回一些新控件。从ajax调用返回控件后,我想为控件设置一些JavaScript。有什么办法吗?谢谢你的帮助! 问题答案: 参与MSAjax事件 这将在每次更新面板刷新时触发。.您可以在那里进行重新绑定/新绑定 …是的,这就是您需要做的,将其放在页面上,它将启动。 更新:: [看起来我的函数名称不正确(我认为它仍然可以正常工作)] 如果页面上

  • 问题内容: 我有一个安排计时器的游戏。我有这个CoresManager文件: 我在游戏中使用这个: 如果播放器注销并且服务器重新启动,CoresManager计时器将停止运行。为了使其再次运行,我添加了代码以使其在您再次登录后再次执行startTimer()。但是,由于如果服务器未注销,计时器仍在运行,因此计时器开始运行两次。根据您注销和登录的次数,计时器开始减去2或更多。我认为,如果有代码确定计

  • 我试图获得一个关于Spring代理如何工作的高级视图。为什么我应该在我的应用程序中使用“API接口&Impl bean”模式或者只使用“bean类”模式。我读了不少这样的答案,但它们都很古老,我相信大多数与Java7和Spring3.x相关。我想知道在2020年,Java11+与Spring5.x(Spring Boot2.x)仍然有什么关系。是否有“最佳做法”可循? 此外,由于的可用性,如果我有