首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

深入nextTick

为什么会有nextTick这个东西的存在?

因为 vue 采用的异步更新策略,当监听到数据发生变化的时候不会立即去更新DOM,

而是开启一个任务队列,并缓存在同一事件循环中发生的所有数据变更;

这种做法带来的好处就是可以将多次数据更新合并成一次,减少操作DOM的次数,

如果不采用这种方法,假设数据改变100次就要去更新100次DOM,而频繁的DOM更新是很耗性能的;

与的区别

定义与理解

此方法是在的原型链上挂载上去的,只有一句话指向,第一个参数指的是要回调的函数,第二个参数为当前的实例对象

在内部对异步队列尝试使用原生的 、 和 ,如果执行环境不支持,则会采用  代替。

宏任务耗费的时间是大于微任务的,所以在浏览器支持的情况下,优先使用微任务。如果浏览器不支持微任务,使用宏任务;但是,各种宏任务之间也有效率的不同,需要根据浏览器的支持情况,使用不同的宏任务。

源码解读

源码位置 core/util/next-tick

以上代码中, 会优先使用微任务,即会优先检测当前浏览器是否支持原生 ,如果不支持的话再去检测是否支持原生的 ,如果还不支持,则表明当前浏览器不支持微任务,那么就使用宏任务。对于宏任务会优先检测是否支持原生 ,如果不支持的话就使用 。

执行回调队列

核心源码解

总结

通过以上就是对  的源码分析,我们了解到数据的变化到  的重新渲染是一个异步过程,发生在下一个 tick。当我们在实际开发中,比如从服务端接口去获取数据的时候,数据做了修改,如果我们的某些方法去依赖了数据修改后的 DOM 变化,我们就必须在  后执行

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20230410A016L400?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券