关于Vue.nextTick()的正确使用方法浅析


Posted in Javascript onAugust 25, 2017

本文主要给大家介绍了关于Vue.nextTick()的正确使用,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。

什么是Vue.nextTick()

官方文档解释如下:

在下次 DOM 更新循环结束之后执行延迟回调。在修改数据之后立即使用这个方法,获取更新后的 DOM。

我理解的官方文档的这句话的侧重点在最后那半句获取更新后的DOM,获取更新后的DOM言外之意就是什么操作需要用到了更新后的DOM而不能使用之前的DOM或者使用更新前的DOM或出问题,所以就衍生出了这个获取更新后的DOM的Vue方法。所以放在Vue.nextTick()回调函数中的执行的应该是会对DOM进行操作的 js代码,比如Swiper扩展包的

var swiper = new Swiper('.swiper-container', {
   pagination: '.swiper-pagination',
   nextButton: '.swiper-button-next',
   prevButton: '.swiper-button-prev',
   paginationClickable: true,
   spaceBetween: 30,
   centeredSlides: true,
   autoplay: 2500,
   autoplayDisableOnInteraction: false
  });

什么时候需要用的Vue.nextTick()

  • 你在Vue生命周期的created()钩子函数进行的DOM操作一定要放在Vue.nextTick()的回调函数中。原因是什么呢,原因是在created()钩子函数执行的时候DOM 其实并未进行任何渲染,而此时进行DOM操作无异于徒劳,所以此处一定要将DOM操作的js代码放进Vue.nextTick()的回调函数中。与之对应的就是mounted钩子函数,因为该钩子函数执行时所有的DOM挂载和渲染都已完成,此时在该钩子函数中进行任何DOM操作都不会有问题 。
  • 在数据变化后要执行的某个操作,而这个操作需要使用随数据改变而改变的DOM结构的时候,这个操作都应该放Vue.nextTick()的回调函数中。

原因是,Vue是异步执行dom更新的,一旦观察到数据变化,Vue就会开启一个队列,然后把在同一个事件循环 (event loop) 当中观察到数据变化的 watcher 推送进这个队列。如果这个watcher被触发多次,只会被推送到队列一次。这种缓冲行为可以有效的去掉重复数据造成的不必要的计算和DOm操作。而在下一个事件循环时,Vue会清空队列,并进行必要的DOM更新。

当你设置 vm.someData = 'new value',DOM 并不会马上更新,而是在异步队列被清除,也就是下一个事件循环开始时执行更新时才会进行必要的DOM更新。如果此时你想要根据更新的 DOM 状态去做某些事情,就会出现问题。。为了在数据变化之后等待 Vue 完成更新 DOM ,可以在数据变化之后立即使用 Vue.nextTick(callback) 。这样回调函数在 DOM 更新完成后就会调用。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
Javascript在IE和FireFox中的不同表现简析
Dec 03 Javascript
Jquery插件编写简明教程
Mar 25 Javascript
javascript实现多栏闭合展开式广告位菜单效果实例
Aug 05 Javascript
jquery+CSS实现的水平布局多级网页菜单效果
Aug 24 Javascript
谈一谈javascript闭包
Jan 28 Javascript
Bootstrap精简教程中秋大放送
Sep 15 Javascript
浅谈javascript:两种注释,声明变量,定义函数
Sep 29 Javascript
利用Javascript裁剪图片并存储的简单实现
Mar 13 Javascript
bootstrap动态添加面包屑(breadcrumb)及其响应事件的方法
May 25 Javascript
浅谈vue自定义全局组件并通过全局方法 Vue.use() 使用该组件
Dec 07 Javascript
对vue.js中this.$emit的深入理解
Feb 23 Javascript
nuxt静态部署打包相对路径操作
Nov 06 Javascript
jQuery图片缩放插件smartZoom使用实例详解
Aug 25 #jQuery
JS中利用swiper实现3d翻转幻灯片实例代码
Aug 25 #Javascript
在Vue组件化中利用axios处理ajax请求的使用方法
Aug 25 #Javascript
JS点击图片弹出文件选择框并覆盖原图功能的实现代码
Aug 25 #Javascript
JavaScript数据类型的存储方法详解
Aug 25 #Javascript
使用JQ完成表格隔行换色的简单实例
Aug 25 #Javascript
Vue.js实现网格列表布局转换方法
Aug 25 #Javascript
You might like
php 正则 过滤html 的超链接
2009/06/02 PHP
PHP多线程批量采集下载美女图片的实现代码(续)
2013/06/03 PHP
php多文件上传下载示例分享
2014/02/20 PHP
javascript 动态修改样式和层叠样式表代码
2010/04/27 Javascript
jQuery Selector选择器小结
2010/05/06 Javascript
在IE浏览器中resize事件执行多次的解决方法
2011/07/12 Javascript
学习JavaScript设计模式之观察者模式
2020/04/22 Javascript
JS遍历页面所有对象属性及实现方法
2016/08/01 Javascript
JS实现淡入淡出图片效果的方法分析
2016/12/20 Javascript
jQuery Validation Engine验证控件调用外部函数验证的方法
2017/01/18 Javascript
vue.js源代码core scedule.js学习笔记
2017/07/03 Javascript
jQuery实现广告条滚动效果
2017/08/22 jQuery
bootstrap datetimepicker控件位置异常的解决方法
2017/11/23 Javascript
Vue-cli中为单独页面设置背景色的实现方法
2018/02/11 Javascript
原生js调用json方法总结
2018/02/22 Javascript
Vue加载组件、动态加载组件的几种方式
2018/08/31 Javascript
基于Vue中使用节流Lodash throttle详解
2019/10/30 Javascript
基于vue hash模式微信分享#号的解决
2020/09/07 Javascript
详解Python中for循环的使用
2015/04/14 Python
Python安装第三方库及常见问题处理方法汇总
2016/09/13 Python
Python使用openpyxl读写excel文件的方法
2017/06/30 Python
对numpy中的数组条件筛选功能详解
2018/07/02 Python
python读取txt文件,去掉空格计算每行长度的方法
2018/12/20 Python
opencv-python的RGB与BGR互转方式
2020/06/02 Python
在IE6系列等老式浏览器中使用HTML5的新标签实现方案
2012/12/25 HTML / CSS
html5指南-5.使用web storage存储键值对的数据
2013/01/07 HTML / CSS
使用PDF.JS插件在HTML中预览PDF文件的方法
2018/08/29 HTML / CSS
Camille Jewelry官网:现代女性时尚首饰
2019/07/07 全球购物
LUISAVIAROMA中国官网:时尚奢侈品牌购物网站
2020/11/01 全球购物
服务理念口号
2014/06/11 职场文书
预备党员自我批评思想汇报
2014/10/10 职场文书
青春雷锋观后感
2015/06/10 职场文书
2016小学优秀教师先进事迹材料
2016/02/26 职场文书
python中opencv实现图片文本倾斜校正
2021/06/11 Python
Sleuth+logback 设置traceid 及自定义信息方式
2021/07/26 Java/Android
Python如何用re模块实现简易tokenizer
2022/05/02 Python