假设我有一个状态,
state = {
counter: 0
}
单击按钮,我要更新状态。
我的updateCounter函数是这个
updateCounter = () => {
this.setState({counter: 1})
}
哪个做得好。
我遇到了人们正在使用它的情况,
updateCounter = () => {
this.setState(prevState => ({
...prevState,
counter: prevState.counter + 1
}))
}
我的问题是
它们之间有什么区别?
为什么我们有2个setState?
使用任何一个都可以提高性能吗?
答案 0 :(得分:1)
存在第二个变体,因此您可以基于旧状态计算新状态。如果这是您需要执行的操作,则应使用第二个,否则您可能会遇到一些细微的错误,即没有将状态设置为期望的值。如果您的新状态与以前的状态无关,那么使用哪个状态都没关系。
P.s,在此代码中无需传播先前的状态。在类组件的this.setState
中,React将为您进行浅层合并:
this.setState(prevState => ({
...prevState, // <-- not needed
counter: prevState.counter + 1
}))
答案 1 :(得分:0)
setState
方法有两种形式:
例如,在使用计数器的情况下,如果要将计数器从状态递增1,则最好使用setState
的函数形式,因为它可以确保您使用的是状态的最新值。
此外,如果新状态取决于当前状态,则不使用功能形式可能会导致一些错误。我早些时候wrote a bit more in detail谈到了它和其他常见问题。
在official React documentation中也有很好的解释。