除了shouldComponent更新,为什么不在React中改变状态?

时间:2017-07-23 01:47:15

标签: reactjs

假设我有一个复杂的状态对象。我要更新的对象图的部分是深层嵌套的。

简单地改变状态对象然后替换整个状态是否有任何缺点,如下所示:

this.state.x.y.z = "new value"
this.setState(newState)

我只能想到你可能想要这样做的两个原因:

  1. shouldComponentUpdate将无法正常工作
  2. 你是函数式编程的粉丝
  3. 除此之外,我大约99%确信这是一种完全有效的React编程风格。

    我只是想验证这个假设。也许有人知道我不会使我的假设失效的事情。

    PS:我知道使用setState只更新状态对象的一个​​或两个字段的技术。我也知道各种函数式编程技术,用于更新对象树的深层嵌套部分而不改变原始部分。因此,请不要对该主题进行跟踪。

    编辑:这里有一个类似的问题[ReactJS:为什么我不应该改变嵌套状态?] [1]。但我的问题略有不同。 他的问题的答案很简单:因为shouldComponentUpdate将无法正常工作。

    我的问题包括警告"除了shouldComponentUpdate和函数式编程的好处"。

1 个答案:

答案 0 :(得分:-1)

docs说......

  

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

     

因为this.props和this.state可以异步更新,所以   不应该依赖它们的值来计算下一个状态。

使用时

this.state.x.y.z = "new value" // line 1
this.setState(newState)

你依赖的假设是setState将在第1行之后立即执行。这不能保证。