https://facebook.github.io/react/docs/react-component.html#setstate
也可以传递带签名的功能 function(state,props)=> newState。这会将原子更新排入队列 在设置之前咨询状态和道具的先前值 值。例如,假设我们想要增加状态值 通过props.step:
this.setState((prevState, props) => {
return {myInteger: prevState.myInteger + props.step};
});
这里的原子更新是什么意思? JavaScript不是一种单线程语言吗?这意味着所有更新都必然是原子的?
答案 0 :(得分:2)
单线程是的,但也有很多潜在的异步性。
let atom = 10
atom = 20
console.log(atom) // guaranteed to be 20, so "atomic"
// race condition
setTimeout(() => atom = 30, Math.random() * 1000)
setTimeout(() => atom = 40, Math.random() * 1000)
setTimeout(() => console.log(atom), 2000) // 30? or 40? random!
setState
是异步调用,因此state
执行后可能已发生变化。
也许不同的措辞是回调函数将事务性更新排队,但我认为任何花哨的措辞都可能会让人感到困惑。最好只解释状态可能已经改变,因此回调以前状态的确切快照。