在React中,当更改state时,不能直接通过this.state更改,而应该通过setState更改。setState会引起某一组件更新后的重绘,会引起新旧虚拟DOM的比较(diff算法)。
因此如果每次更改state都立即执行,进行重绘就会很耗费性能。
因此,对于setState根据情况而决定,是立即更改(同步执行),还是放入队列后批量更新(异步执行)
在React中,对于React引发的事件处理函数中的setState,是异步的。而除此之外的,如addEventListener、setTimeout等回调函数中setState是同步的。
当调用setState时,会判断isBatchingUpdates属性值,当为true的时候立即更新,当为false的时候放入队列中,等待批量更新