Performance 如果上一个状态和下一个状态相同,是否会触发状态更改?

Performance 如果上一个状态和下一个状态相同,是否会触发状态更改?,performance,reactjs,Performance,Reactjs,在我的状态更改处理程序上,我是否需要执行以下操作: deviceSize = ... this.setState((prevState) => { if (prevState.deviceSize != deviceSize) { return { deviceSize } } else { return null } }) 或者,以下这些就足够了吗 this.setState((prevState) => { return

在我的状态更改处理程序上,我是否需要执行以下操作:

deviceSize = ...
this.setState((prevState) => {
  if (prevState.deviceSize != deviceSize) {
    return {
      deviceSize
    }
  } else {
    return null
  }
})
或者,以下这些就足够了吗

this.setState((prevState) => {
    return {
      deviceSize
    }
})

我担心的是,如果我返回某个内容,它将进行一些UI更新。

你在这里错了。setState从不检查值。调用时,它只是重新渲染视图

要检查组件是否应该重新呈现,请选中
shouldComponentUpdate()方法。

`shouldComponentUpdate(nextProps, nextState)` {

   1. it is triggered before the re-rendering process .
   2. It tells render() method should be called or not.
   3. If nothing changed, you can avoid re-render by returning false.
}

我根本不会走这条路。除非您知道设置状态的时间,否则不应调用设置状态

使用
componentdiddupdate
了解何时调用setState。就像医生说的

通常,我们建议对此类逻辑使用componentDidUpdate() 相反

比如说

componentDidUpdate(prevProps, prevState) {
    if (prevState.something !== something) { // you can compare previous state or props with current state or props
        this.setState({something: something});
    }
}

请注意,只有当您真正想调用setState时才会调用它

如果状态相同,则不会有任何更新。TL;DR如果您的组件是纯的,那么您的第二个示例就足够了。如果没有状态更改,为什么要调用set state?首先,您不应该这样做调用setState将始终触发shouldComponentUpdate并完全运行渲染函数,如果shouldComponentUpdate返回true(或没有shouldComponentUpdate),shouldComponentUpdate的问题是,下面的所有内容将不再根据此更新。。。是 啊如果没有什么变化,那你为什么担心呢?如果状态与技术上相同,则不会发生任何更改。因为呈现的组件可能会使用
此.State
值,在这种情况下,这无关紧要,但如果其自身的状态仅在组件内发生更改,则会怎么样。@JohnRuddell完全同意。在使用任何东西之前,我们必须了解用例。