为了账号安全,请及时绑定邮箱和手机立即绑定

setState的机制问题?

setState的机制问题?

长风秋雁 2018-12-27 22:15:15
书上看到直接调用this.setstate和在setTimeout里面调用结果不一样,是因为它们走的逻辑不一样。书上说到调用栈,为什么setTimeout前置没有调用batchUpdate呢?
查看完整描述

1 回答

?
弑天下

TA贡献1818条经验 获得超8个赞

首先先说结论,setTimeout或者ajax之类的异步函数都不会调用batchUpdate,因为React控制不了timer之类的事件。

实际上在你的函数里面,React做了不少处理,首先把你的函数包装成一个Transaction,在Transacion的initialize阶段建立起一个update queue(并设置isBatchingUpdates为true),然后在close阶段将isBatchingUpdates设置为false,并统一触发更新。

而在timer之类的回调函数里面React做不了这一步操作,所以就没有调用batchUpdate。

当然,这个可能在16版本引入fiber之后“优化”掉,不过也只是可能。


查看完整回答
反对 回复 2019-01-17
  • 1 回答
  • 0 关注
  • 457 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信