1.setState
setState 是异步更新的
简单总结下原因:
- setState设计为异步可以显著提升性能:
– 如果每次调用setState都进行一次更新,那么意味着render会被频繁调用,界面重新渲染,这样效率较低
–所以比较好的办法就是 获取多个更新,进行批量更新 - 如果同步更新state 但是还没执行render函数,那么state和props不能保持同步
– state和props不能保持一直性 会在开发中产生很多问题.
2.那些情况下setState变成同步更新
- 情况一 :把setState放在 定时器中
- 情况二 : 吧setState 放在 原生DOM监听中
总结下:
在组件生命周期或者React合成事件中,是异步
在setTimeout或者原生dom事件中,是同步
详情见源码吧 反正我说不清
补充:react的合成事件合成对象
为什么react搞一手合成对象,为什么不直接用原生的,
以为react这个框架他不仅仅要跑在浏览器上,如果用的是react-native 就是跑在原生的手机端的
jsx代码跑在浏览器上就是 浏览器产生的dom对象
手机端就是原生控件对象,所以需要什么对象是不明确的