javascript - setState的机制问题?

查看:88
本文介绍了javascript - setState的机制问题?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

书上看到直接调用this.setstate和在setTimeout里面调用结果不一样,是因为它们走的逻辑不一样。书上说到调用栈,为什么setTimeout前置没有调用batchUpdate呢?

解决方案

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

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

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

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

这篇关于javascript - setState的机制问题?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆