Vue中的nextTick作用和几个简单的使用场景


Posted in Vue.js onJanuary 25, 2021

目的

理解下 nextTick 的作用和几个简单的使用场景

正文

起什么作用?

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

我想各位都知道或了解 Vue 的渲染流程,Vue 在监听到数据变化后会重新渲染,配合 VDOM 更新真实的 DOM,而 nextTick 的触发时机就是在调用方法后的第一次重新渲染完毕后。

Vue中的nextTick作用和几个简单的使用场景

如何使用?

有两种使用方法,一种是传入回调,另一种是 Promise,官方使用示例如下:

// 修改数据
vm.msg = 'Hello'
// DOM 还没有更新
Vue.nextTick(function () {
 // DOM 更新了
})

// 作为一个 Promise 使用 (2.1.0 起新增,详见接下来的提示)
Vue.nextTick()
 .then(function () {
 // DOM 更新了
 })

如果在 SPA(单文件组件) 中,可能是这个样子

<template>
 <div id="test">{{msg}}</div>
</template>

<script>
export default {
 name: 'app',
 data() {
 return {
  "msg": "Hello World!"
 }
 },
 method() {
 this.msg = "Hi World!";
 this.$nextTick(() => {
  console.log('DOM updated:', document.getElementById('test').innerHTML)
 });
 }
}
</script>

有什么使用场景?

需要等待渲染完成后执行的一些方法

初始化绑定或操作 DOM

比如在 created 和 mounted 回调中,需要操作渲染好的 DOM,则需要在 nextTick 中执行相关逻辑,这在必须使用一些老的需要绑定 DOM 的库时很有用。

比如,在加载 UEditor 时,可能会这样玩

<template>
<script id="container" name="content" type="text/plain"> 这里写你的初始化内容 </script>
</template>
<script>
export default {
 mounted() {
  this.nextTick(() => {
   var ue = UE.getEditor('container');
  });
 }
}

获取元素宽度

在 Vue 中获取元素宽度有两种方式,第一种是通过 $refs[ref名称].style.width,第二种可以使用传统操作 DOM 的方式获取,但这两者要获取到准确的元素宽度,则需要在 DOM 渲染完毕后执行。

<template>
<p ref="myWidth" v-if="showMe">{{ message }}</p> <button @click="getMyWidth">获取p元素宽度</button>
</template>
<script>
export default {
 data() {
 return {
  message: "Hello world!",
  showMe: false,
 },
 methods: {
  getMyWidth() {
  this.showMe = true;
  //this.message = this.refs.myWidth.offsetWidth;  //报错 TypeError: this.refs.myWidth is undefined 
  this.nextTick(()=>{
  //dom元素更新后执行,此时能拿到p元素的属性   this.message = this.refs.myWidth.offsetWidth; })
  }
 }
 }
}
</script>

总结

虽说 Vue 的设计理念并不建议我们去直接操作 DOM,但有些场景下出现了特别令人迷惑的问题,理解 Vue 的渲染逻辑后,使用 nextTick() 可以解决。

以上就是如何使用Vue中的nextTick的详细内容,更多关于使用vue中的nextTick的资料请关注三水点靠木其它相关文章!

Vue.js 相关文章推荐
vue 获取到数据但却渲染不到页面上的解决方法
Nov 19 Vue.js
ESLint 是如何检查 .vue 文件的
Nov 30 Vue.js
详解如何在vue+element-ui的项目中封装dialog组件
Dec 11 Vue.js
Vue-router中hash模式与history模式的区别详解
Dec 15 Vue.js
Vue中强制组件重新渲染的正确方法
Jan 03 Vue.js
如何在vue-cli中使用css-loader实现css module
Jan 07 Vue.js
通过vue.extend实现消息提示弹框的方法记录
Jan 07 Vue.js
Vue看了就会的8个小技巧
Jan 21 Vue.js
Vue单页面应用中实现Markdown渲染
Feb 14 Vue.js
vue-cropper插件实现图片截取上传组件封装
May 27 Vue.js
Vue自定义铃声提示音组件的实现
Jan 22 Vue.js
vue实现列表垂直无缝滚动
Apr 08 Vue.js
Vue使用Ref跨层级获取组件的步骤
Jan 25 #Vue.js
如何在Vue项目中添加接口监听遮罩
Jan 25 #Vue.js
使用vue3重构拼图游戏的实现示例
Jan 25 #Vue.js
vue 计算属性和侦听器的使用小结
Jan 25 #Vue.js
vue keep-alive的简单总结
Jan 25 #Vue.js
vue form表单post请求结合Servlet实现文件上传功能
Jan 22 #Vue.js
Vue 集成 PDF.js 实现 PDF 预览和添加水印的步骤
Jan 22 #Vue.js
You might like
PHP中time(),date(),mktime()区别介绍
2013/09/28 PHP
PHP文件生成的图片无法使用CDN缓存的解决方法
2015/06/20 PHP
简单PHP会话(session)说明介绍
2016/08/21 PHP
Ajax,UTF-8还是GB2312 eval 还是execScript
2008/11/13 Javascript
从零开始学习jQuery (十) jQueryUI常用功能实战
2011/02/23 Javascript
基于JQuery实现CheckBox全选全不选
2011/06/27 Javascript
jsp网页搜索结果中实现选中一行使其高亮
2014/02/17 Javascript
学习JavaScript设计模式(封装)
2015/11/26 Javascript
使用Function.apply()的参数数组化来提高 JavaScript程序性能的技巧
2015/12/23 Javascript
JavaScript表单焦点自动切换代码
2016/07/24 Javascript
关于jQuery库冲突的完美解决办法
2017/05/20 jQuery
Popup弹出框添加数据实现方法
2017/10/27 Javascript
详解Vue中watch的高级用法
2018/05/02 Javascript
javascript异步处理与Jquery deferred对象用法总结
2019/06/04 jQuery
在layui中select更改后生效的方法
2019/09/05 Javascript
在Vue mounted方法中使用data变量详解
2019/11/05 Javascript
vue父子组件的通信方法(实例详解)
2019/11/10 Javascript
[14:03]2017DOTA2亚洲邀请赛开幕式:12神兵演绎水墨中华
2017/04/01 DOTA
Python中一些自然语言工具的使用的入门教程
2015/04/13 Python
Scrapy-redis爬虫分布式爬取的分析和实现
2017/02/07 Python
python日期相关操作实例小结
2019/06/24 Python
pytorch之添加BN的实现
2020/01/06 Python
ubuntu16.04升级Python3.5到Python3.7的方法步骤
2020/08/20 Python
python爬虫beautifulsoup库使用操作教程全解(python爬虫基础入门)
2021/02/19 Python
CSS3中媒体查询结合rem布局适配手机屏幕
2019/06/10 HTML / CSS
Space NK英国站:英国热门美妆网站
2017/12/11 全球购物
潘多拉珠宝英国官方网上商店:PANDORA英国
2018/06/12 全球购物
煤矿安全生产责任书
2014/04/15 职场文书
中药学专业求职信
2014/05/31 职场文书
2014年销售助理工作总结
2014/12/01 职场文书
2016自主招生校长推荐信范文
2015/03/23 职场文书
2015年社区卫生工作总结
2015/04/21 职场文书
2015年行政执法工作总结
2015/05/23 职场文书
祝寿主持词
2015/07/02 职场文书
晚会开幕词范文
2016/03/04 职场文书
详解CocosCreator消息分发机制
2021/04/16 Javascript