如果上一个和下一个州是相同的,会发生状态变化吗?

时间:2017-04-06 19:14:25

标签: performance reactjs

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

deviceSize = ...
this.setState((prevState) => {
  if (prevState.deviceSize != deviceSize) {
    return {
      deviceSize
    }
  } else {
    return null
  }
})

或者以下是

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

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

2 个答案:

答案 0 :(得分:1)

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

要检查组件是否应重新渲染,请检查shouldComponentUpdate() method.

`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.
}

答案 1 :(得分:0)

我根本不会走这条路。你不应该调用setState,除非你知道它的时间到setState。

You should read the docs on setState

使用componentDidUpdate知道何时调用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