代码之家  ›  专栏  ›  技术社区  ›  prmph

在React componentDidUpdate中,道具和状态是否可以同时更改?

  •  6
  • prmph  · 技术社区  · 6 年前

    在react组件中,通常不应在其中变异道具。此外,父级只能更改道具,而不能直接更改状态。基于这两个事实,假设在任何componentDidUpdate调用中,例如:。,

    componentDidUpdate(prevProps:Readonly>,prevState:Readonly)

    这道具可能不同于prevProps,或者这个。状态可能与prevState不同,但这两种情况不能同时发生?

    2 回复  |  直到 6 年前
        1
  •  2
  •   Tomasz Mularczyk    6 年前

    From react docs :

    React可以将多个setState()调用批处理到一个更新中 表演

    因此,基于这一点,我的最佳猜测是,出于性能原因,React可能会将道具和状态更新组合在一起,只执行一次更新,而不是两次更新。因此,要回答您的问题:

    这道具可能不同于prevProps,或者这个。州可能是 与prevState不同,但这两种情况不能同时发生 时间

    我想 实际上,出于性能原因,这可能会像前面所说的那样发生。

        2
  •  0
  •   ellockie    4 年前

    是的,实际上以下代码有时会输出 true (取决于上下文)。

    componentDidUpdate(prevProps, prevState) {
        const bothChanged = (prevProps !== this.props) && (prevState !== this.state);
        console.log(bothChanged);  // "true" (sometimes)
    }