【问题标题】:React: How can we know that all component has been mounted/rendered after setState()?React:我们如何知道在 setState() 之后所有组件都已安装/渲染?
【发布时间】:2017-06-28 09:05:42
【问题描述】:

在 react 对组件 (R) 的 setState() 的调用可以触发所有子组件的重新渲染。

我们怎么知道什么时候完成? 在R 的所有子级都已安装/渲染/更新后调用哪个生命周期方法?

更详细:

让我们考虑以下情况:

有一个根组件R,及其子组件C1C2

我想实现我自己的 redux 存储,其中子组件(C1C2)可以调度操作,并且在所有子组件都已安装/重新渲染/更新之后,我想命令 redux 存储处理分派的动作。

所以我需要知道所有子节点何时被渲染,并安排调用 redux store 来命令 store 处理分派的操作。

R 的所有子级都已挂载/渲染/更新后调用哪个生命周期方法?

【问题讨论】:

标签: reactjs redux react-redux


【解决方案1】:

更新:React 已经改变了它的生命周期,但在这种情况下,你需要的方法还是一样的。新的生命周期是:

A) 安装

  1. 构造函数
  2. 静态 getDerivedStateFromProps
  3. 渲染
  4. componentDidMount

B) 更新(包括道具和状态)

  1. 静态 getDerivedStateFromProps
  2. 应该组件更新
  3. 渲染
  4. getSnapshotBeforeUpdate
  5. componentDidUpdate

老答案

ComponentDidUpdate 会照你说的做。它在由于 props 更改或由于 state 更改而渲染后立即启动。

生命周期:

A) 安装

  1. 构造函数
  2. ComponentWillMount
  3. 渲染
  4. ComponentDidMount

B) 道具变化

  1. ComponentWillReceiveProps
  2. 应该组件更新
  3. 渲染
  4. ComponentDidUpdate

C) 状态变化

  1. 应该组件更新
  2. 组件WillUpdate
  3. 渲染
  4. ComponentDidUpdate

更多信息: https://reactjs.org/docs/react-component.html#componentdidupdate

【讨论】:

  • 谢谢,但它会在所有孩子都被渲染后启动吗?
  • 我不确定。这家伙的反应只是对当前文档的推断它指定在更新 DOM 时调用 componentDidUpdate并不意味着它自己的孩子 。我想强调这些操作是异步的
  • 父组件渲染直到它的所有子组件都被渲染后才完成。所以如果父亲的渲染过程没有完成,它的componentDidUpdate就没有启动。无论如何,对此进行测试并确认此行为并不乏味。
【解决方案2】:

我认为您正在寻找 componentDidUpdate 生命周期事件。 https://facebook.github.io/react/docs/react-component.html#componentdidupdate

它在组件被更新时触发(并且它的所有子组件也被更新)。

⚠ 此事件不会在第一次渲染时触发。如果还需要处理首次渲染,则必须同时使用componentDidUpdatecomponentDidMount

【讨论】:

    猜你喜欢
    • 2022-11-02
    • 1970-01-01
    • 2020-08-08
    • 1970-01-01
    • 2017-11-01
    • 2018-11-15
    • 2018-01-29
    • 2021-08-26
    • 2020-01-22
    相关资源
    最近更新 更多