在React componentDidUpdate中,道具和状态可以同时改变吗?

时间:2018-04-15 08:35:06

标签: javascript reactjs components

在反应组件中,通常你不应该在其中改变道具。此外,父母只能改变道具,而不能直接改变状态。基于这两个事实,假设在componentDidUpdate的任何调用中都是正确的,例如

componentDidUpdate(prevProps:Readonly>,prevState:Readonly)

this.props可能与prevProps不同,或者this.state可能与prevState不同,但两种情况不能同时发生?

2 个答案:

答案 0 :(得分:2)

From react docs

  

React可以将多个setState()调用批处理为单个更新   性能

所以我最好的猜测是,出于性能原因,React可以将道具和状态更新组合在一起,只执行一次更新而不是两次。所以回答你的问题:

  

this.props可能与prevProps不同,或者this.state可能是   与prevState不同,但两种情况都不可能同时发生   时间?

我认为实际上可能就像之前所说的那样 - 出于性能原因。

答案 1 :(得分:0)

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

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