关于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 相关文章推荐
基于JQuery的cookie插件
Apr 07 Javascript
js怎么终止程序return不行换jfslk
May 30 Javascript
jQuery 1.9.1源码分析系列(十五)之动画处理
Dec 03 Javascript
jQuery链式调用与show知识浅析
May 11 Javascript
利用JavaScript在网页实现八数码启发式A*算法动画效果
Apr 16 Javascript
JavaScript实现的冒泡排序法及统计相邻数交换次数示例
Apr 26 Javascript
说说Vue.js中的functional函数化组件的使用
Feb 12 Javascript
vue改变对象或数组时的刷新机制的方法总结
Apr 24 Javascript
JavaScript中Dom操作实例详解
Jul 08 Javascript
使用layui 的layedit定义自己的toolbar方法
Sep 18 Javascript
JavaScript ECMA-262-3 深入解析(一):执行上下文实例分析
Apr 25 Javascript
聊聊JS ES6中的解构
Apr 29 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
Thinkphp多文件上传实现方法
2014/10/31 PHP
thinkPHP自动验证机制详解
2016/12/05 PHP
php实现的读取CSV文件函数示例
2017/02/07 PHP
PHP用户管理中常用接口调用实例及解析(含源码)
2017/03/09 PHP
PHP7中I/O模型内核剖析详解
2019/04/14 PHP
另类调用flash无须激活的方法
2006/12/27 Javascript
jquery.bgiframe.js在IE9下提示INVALID_CHARACTER_ERR错误
2013/01/11 Javascript
JS实现时间格式化的方式汇总
2013/10/16 Javascript
jQuery截取指定长度字符串代码
2014/08/21 Javascript
JQuery异步获取返回值中文乱码的解决方法
2015/01/29 Javascript
JavaScript File API文件上传预览
2016/02/02 Javascript
Node.js批量给图片加水印的方法
2016/11/15 Javascript
JS实现旋转木马式图片轮播效果
2017/01/18 Javascript
js使用highlight.js高亮你的代码
2017/08/18 Javascript
js用类封装pop弹窗组件
2017/10/08 Javascript
react MPA 多页配置详解
2019/10/18 Javascript
javascript设计模式 ? 职责链模式原理与用法实例分析
2020/04/16 Javascript
Pandas删除数据的几种情况(小结)
2019/06/21 Python
python创建学生成绩管理系统
2019/11/22 Python
Python实现淘宝秒杀功能的示例代码
2021/01/19 Python
可自定义箭头样式的CSS3气泡提示框
2016/03/16 HTML / CSS
解决HTML5手机端页面缩放的问题
2017/10/27 HTML / CSS
canvas小画板之平滑曲线的实现
2020/08/12 HTML / CSS
韩国11街:11STREET
2018/03/27 全球购物
意大利折扣和优惠券网站:Groupalia
2019/10/09 全球购物
美国专业消费电子及摄影器材网站:B&H Photo Video
2019/12/18 全球购物
Java语言的优势
2015/01/10 面试题
我的求职计划书
2014/01/10 职场文书
幼儿园实习生辞职信
2014/01/20 职场文书
公司会计岗位职责
2014/02/13 职场文书
股份合作协议书
2014/04/12 职场文书
副科级后备干部考察材料
2014/05/15 职场文书
2015大学生入党个人自传
2015/06/26 职场文书
2016道德模范先进事迹材料
2016/02/26 职场文书
SQL Server中交叉联接的用法详解
2021/04/22 SQL Server
vue实现锚点定位功能
2021/06/29 Vue.js