简单理解Vue中的nextTick
2019-05-16 10:49
507 查看
先来一个示例了解下关于Vue中的DOM更新以及nextTick的作用。
一、示例
模板
<div class="app"> <div ref="msgDiv">{{msg}}</div> <div v-if="msg1">Message got outside $nextTick: {{msg1}}</div> <div v-if="msg2">Message got inside $nextTick: {{msg2}}</div> <div v-if="msg3">Message got outside $nextTick: {{msg3}}</div> <button @click="changeMsg"> Change the Message </button> </div>
vue实例
new Vue({ el: '.app', data: { msg: 'Hello Vue.', msg1: '', msg2: '', msg3: '' }, methods: { changeMsg() { this.msg = "Hello world." this.msg1 = this.$refs.msgDiv.innerHTML this.$nextTick(() => { this.msg2 = this.$refs.msgDiv.innerHTML }) this.msg3 = this.$refs.msgDiv.innerHTML } } })
点击之前
点击之后
从图中可以得知:msg1和msg3显示的内容还是变换之前的,而msg2显示的内容是变换之后的。其根本原因是因为Vue中DOM更新是异步的(详细解释在后面)。
二、下面了解下nextTick的主要应用的场景及原因。
在Vue生命周期的created()钩子函数进行的DOM操作一定要放在Vue.nextTick()的回调函数中
在created()钩子函数执行的时候DOM 其实并未进行任何渲染,而此时进行DOM操作无异于徒劳,所以此处一定要将DOM操作的js代码放进Vue.nextTick()的回调函数中。与之对应的就是mounted()钩子函数,因为该钩子函数执行时所有的DOM挂载和渲染都已完成,此时在该钩子函数中进行任何DOM操作都不会有问题 。
在数据变化后要执行的某个操作,而这个操作需要使用随数据改变而改变的DOM结构的时候,这个操作都应该放进Vue.nextTick()的回调函数中。
作者:Ruheng
链接:https://www.jianshu.com/p/a7550c0e164f
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
相关文章推荐
- 简单理解Vue中的nextTick
- 简单理解Vue中的nextTick方法
- 关于vue中的nextTick深入理解
- 正确理解使用Vue里的nextTick方法
- 理解vue实现原理,实现一个简单的Vue框架
- Vue生命周期函数的简单理解
- VUE的优缺点简单理解
- vue2.0路由-适合刚接触新手简单理解
- 简单理解vue中track-by属性
- 简单理解vue中el、template、replace元素
- 理解Vue 2.0 的ref属性及简单用法
- 简单理解vue中el、template、replace元素
- 简单理解vue中Props属性_javascript技巧
- 简单理解vue中Props属性
- 理解vue实现原理,实现一个简单的Vue框架
- vue之理解异步更新 --- nextTick
- 简单理解vue中实例属性vm.$els
- 简单理解Vue条件渲染
- Vue slot简单理解
- rowid 简单理解理解