Reactjs 通过赋值设置状态

Reactjs 通过赋值设置状态,reactjs,Reactjs,在react中,是否有人希望通过赋值而不是调用setState(…)来设置变量的状态的原因 例如: // accessing state var directly this.state.myVar = 'changed state' // instead of calling setState this.setState({myVar: 'changed state'}) 在我看来,这似乎是一种反模式。但也许有一个很好的解释,为什么有时候它是必要的?这是必要的,因为React必须知道这个状态是

在react中,是否有人希望通过赋值而不是调用setState(…)来设置变量的状态的原因

例如:

// accessing state var directly
this.state.myVar = 'changed state'
// instead of calling setState
this.setState({myVar: 'changed state'})

在我看来,这似乎是一种反模式。但也许有一个很好的解释,为什么有时候它是必要的?

这是必要的,因为React必须知道这个
状态是否被认为是变异的。没有肮脏的登记手续。调用
this.setState
时,状态对象被认为是脏的,并且不会与以前的状态进行进一步比较。这个答案可能有助于更详细地解释这一点:

在这种情况下,直接设置(变异)状态将起作用:
this.state.myVar='changed state'

但是,应根据以下要求避免:

切勿直接对该状态进行变异
,因为之后调用
setState()
可能会替换您进行的变异。将
此.state
视为是不可变的

改变状态的主要问题是它会阻止某些React生命周期方法工作。例如,React的
shouldComponentUpdate()
方法通常用于在处理大量组件时加速应用程序。如果状态已更新,该方法允许您跳过重新渲染组件:

// Return false if you want to skip the `render()` method
shouldComponentUpdate: function(nextProps, nextState) {
  return this.state.myVar === nextState.myVar;
}

如果您正在改变状态,上述操作将不起作用
this.state.myVar
nextState.myVar
引用是相同的,因此上面的引用将始终返回
true

因此,如果我通过执行以下操作来更新状态变量:this.state.myVar='changed var',我认为状态对象不会被认为是脏的?这就是为什么会有人想这样做的原因?我认为你应该避免直接改变状态,避免混淆代码和“为什么不更新!?!”:)是的,我就是这么认为的。我只是想知道是否有充分的理由这样做。