Reactjs 通过赋值设置状态
在react中,是否有人希望通过赋值而不是调用setState(…)来设置变量的状态的原因 例如:Reactjs 通过赋值设置状态,reactjs,Reactjs,在react中,是否有人希望通过赋值而不是调用setState(…)来设置变量的状态的原因 例如: // accessing state var directly this.state.myVar = 'changed state' // instead of calling setState this.setState({myVar: 'changed state'}) 在我看来,这似乎是一种反模式。但也许有一个很好的解释,为什么有时候它是必要的?这是必要的,因为React必须知道这个状态是
// 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',我认为状态对象不会被认为是脏的?这就是为什么会有人想这样做的原因?我认为你应该避免直接改变状态,避免混淆代码和“为什么不更新!?!”:)是的,我就是这么认为的。我只是想知道是否有充分的理由这样做。