关于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中input中readonly和disabled区别介绍
Oct 23 Javascript
Javascript 加载和执行-性能提高篇
Dec 28 Javascript
jquery简单的拖动效果实现原理及示例
Jul 26 Javascript
javascript遍历控件实例详细解析
Jan 10 Javascript
多种方法实现360浏览器下禁止自动填写用户名密码
Jun 16 Javascript
javascript适合移动端的日期时间拾取器
Nov 10 Javascript
Jquery Mobile 自定义按钮图标
Nov 18 Javascript
详解JavaScript基于面向对象之继承
Dec 13 Javascript
iframe与主框架跨域相互访问实现方法
Sep 14 Javascript
bootstrap 日期控件 datepicker被弹出框dialog覆盖的解决办法
Jul 09 Javascript
基于JavaScript实现贪吃蛇游戏
Mar 16 Javascript
微信小程序实现首页弹出广告
Dec 03 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 Undefined index和Undefined variable的解决方法
2008/03/27 PHP
php读取der格式证书乱码解决方法
2015/06/22 PHP
php自定义函数实现二维数组排序功能
2016/07/20 PHP
asp函数split()对应php函数explode()
2019/02/27 PHP
兼容Mozilla必须知道的知识。
2007/01/09 Javascript
js 调用父窗口的具体实现代码
2013/07/15 Javascript
深入分析jquery解析json数据
2014/12/09 Javascript
浅谈javascript中for in 和 for each in的区别
2015/04/23 Javascript
jQuery动态效果显示人物结构关系图的方法
2015/05/07 Javascript
js省市县三级联动效果实例
2020/04/15 Javascript
微信小程序 后台https域名绑定和免费的https证书申请详解
2016/11/10 Javascript
bootstrap datetimepicker实现秒钟选择下拉框
2017/01/05 Javascript
jQuery中ztree 点击文本框弹出下拉框的实例代码
2017/02/05 Javascript
微信小程序 自动登陆PHP源码实例(源码下载)
2017/05/08 Javascript
微信小程序多张图片上传功能
2017/06/07 Javascript
浅谈vue+webpack项目调试方法步骤
2017/09/11 Javascript
JS实现百度网盘任意文件强制下载功能
2018/08/31 Javascript
JavaScript简易计算器制作
2020/01/17 Javascript
JavaScript实现轮播图片完整代码
2020/03/07 Javascript
javascript设计模式 ? 装饰模式原理与应用实例分析
2020/04/14 Javascript
Python文件及目录操作实例详解
2015/06/04 Python
pycharm debug功能实现跳到循环末尾的方法
2018/11/29 Python
python并发编程多进程之守护进程原理解析
2019/08/20 Python
Python使用GitPython操作Git版本库的方法
2020/02/29 Python
不可轻视HTML5!App三年内将被html5顶替彻底消失
2015/11/18 HTML / CSS
canvas进阶之如何画出平滑的曲线
2018/10/15 HTML / CSS
为什么要做架构设计
2015/07/08 面试题
销售代表求职自荐信
2013/10/01 职场文书
搞笑创意广告语
2014/03/17 职场文书
《老山界》教学反思
2014/04/08 职场文书
城管年度个人总结
2015/02/28 职场文书
2015少先队大队辅导员工作总结
2015/07/24 职场文书
2016计划生育先进个人事迹材料
2016/02/29 职场文书
各国货币符号大全
2022/02/17 杂记
Java字符串逆序方法详情
2022/03/21 Java/Android
python三子棋游戏
2022/05/04 Python