setState用于变更状态触发组件重新渲染,更新视图UI.不清楚setState什么时候更新,所以难以解释是同步的还是异步的
只需要说明什么是同步场景什么是异步场景
首先我们要知道什么是合成事件?
1.React给document挂上事件监听
2.DOM事件触发后冒泡到document
3.React找到对应的组件造出一个合成事件出来
4.并按组件树模拟一遍事件冒泡
调用顺序
通常我们认为是异步的,React根据队列逐一执行,合并state数据完成后执行回调,根据结果更新虚拟DOM触发渲染.
为什么设置为异步
1.保持内部的一致性
2.为后续的架构升级启用并发更新,根据数据的来源分配不同的优先级,再根据优先级并发处理提升渲染的性能
3.统一渲染,减少渲染的次数.提升性能
什么时候优势同步的呢???
正确的应该是输出0和1,为什么???
因为我们的setState并不是真正的异步函数,是通过队列延迟操作来模拟实现的,通过isBatchUpdate来判断是先存进队列还是同步跟新…值为t则执行异步操作,值为f,则为同步更新
在外部的原生事件中,并没有外层的封装和拦截,无法更新isBatchUpdate的值,导致值为false.所以我们会立即渲染.
总结:
在addEventListener . setTimeout.setlnterval这些原生事件中都会同步更新
大总结: