当前位置: 首页 > news >正文

vue2-$nextTick有什么作用?

1、$nextTick是什么?
官方定义:在下次DOM更新循环结束之后执行延迟回调。在修改数据之后立即使用这个方法,获取更新后的DOM。
解释:Vue在更新DOM时是异步执行的,当数据发生变化时,Vue将开启一个异步更新的队列,视图需要等到队列的所有数据变化完成之后,再进行统一更新。
举例:
HTML结构:
在这里插入图片描述
构建一个vue实例:
在这里插入图片描述
修改message值:
在这里插入图片描述
这时候,如果想获取页面最新的DOM值,却发现获取到的是旧值。
在这里插入图片描述
这是因为message数据在发生变化的时候,vue并不会立即去更新DOM,而是将修改数据的操作放在了一个异步操作的队列中。
如果我们一直修改相同的数据,异步操作队列还会进行去重。
等待同一事件循环中的所有数据变化完成之后,会将队列中的事件拿来进行处理,进行DOM更新。
1)为什么要有nextTick
举例:在这里插入图片描述
如果没有nextTick更新机制,那么num每次更新都会触发视图更新(上边代码会更新10万次视图),有了nextTick机制,只需更新一次,所以nextTick本质是一种优化策略。

2、使用场景
如果想要在修改数据之后立刻得到更新后的DOM结构,可以使用Vue.nextTick();
第一个参数为:回调函数(可以获取最近的DOM结构)
第二个参数为:执行函数的上下文
在这里插入图片描述
组件内使用vm. n e x t T i c k ( ) , 实例方法只需要通过 t h i s . nextTick(),实例方法只需要通过this. nextTick(),实例方法只需要通过this.nextTick();并且回调函数中的this将自动绑定到当前的Vue实例上。
在这里插入图片描述
$nextTick()会返回一个Promise对象,可以用async/await完成相同作用的事情。
在这里插入图片描述
3、实现原理
源码位置:/src/core/util/next-tick.js
callbacks也就是异步操作队列
callbacks新增回调函数后又执行了timerFunc函数,pending是用来标识同一时间只能执行一次。
在这里插入图片描述
在这里插入图片描述
timerFunc函数定义,这里是根据当前环境支持什么方法则调用哪个,分别有Promise.then,MutationObserver,setImmediate,setTimeout
通过上面任一方法,进行降级操作。
在这里插入图片描述
在这里插入图片描述
无论是微任务还是宏任务,都会放到flushCallbacks使用。
这里将callbacks里面的函数复制一份,同时callbacks置空。
依次执行callbacks里面的函数。
在这里插入图片描述
小结:
1、把回调函数放到callbacks等待执行
2、将执行函数放到微任务或者宏任务中。
3、事件循环到了微任务或者宏任务之后,执行函数依次执行callbacks中的回调。

http://www.lryc.cn/news/111885.html

相关文章:

  • python自动收集粘贴板
  • Vue3_语法糖—— <script setup>以及unplugin-auto-import自动引入插件
  • 2023-08-06力扣做过了的题
  • 进程间通信之管道
  • f12 CSS网页调试_css样式被划了黑线怎么办
  • vue-制作自动滚动效果
  • [国产MCU]-BL602-开发实例-DMA数据传输
  • Redis压缩列表
  • 【SA8295P 源码分析】62 - Android GVM Kernel 内核 make bootimage 过程分析
  • 机器学习——SMO算法推导与实践
  • mac的终端通过code .指令快速启动vscode
  • 前端系统使用iframe下载文件
  • RabbitMQ - 简单案例
  • 《吐血整理》高级系列教程-吃透Fiddler抓包教程(30)-Fiddler如何抓Android7.0以上的Https包-番外篇
  • 服务器被攻击了怎么办?
  • P1156 垃圾陷阱(背包变形)
  • [Docker实现测试部署CI/CD----构建成功后钉钉告警(7)]
  • UE5 半透明覆层材质
  • 在Raspberry Pi 4上安装Ubuntu 20.04 + ROS noetic(不带显示器)
  • CommStudio for .NET Crack
  • 蓝桥杯上岸考点清单 (冲刺版)!!!
  • AI一键生成短视频
  • 基于MATLAB长时间序列遥感数据分析(以MODIS数据处理为例)
  • postgresql之内存池-AllocsetContext
  • QT 使用单例模式
  • 接口测试——postman接口测试(三)
  • react中hooks的理解与使用
  • STM32的电动自行车信息采集上报系统(学习)
  • 蓝桥杯上岸每日N题 第七期(小猫爬山)!!!
  • 【Linux系统编程】冯诺依曼体系结构