signed

QiShunwang

“诚信为本、客户至上”

React 的setState

2021/5/14 20:55:07   来源:

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对象
手机端就是原生控件对象,所以需要什么对象是不明确的