vue.nextTick(callback)

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

(所以放在vue.nextTick()回调函数中执行的应该是对Dom进行操作的js代码)即,nextTick是将回调函数延迟在下一次dom更新数据后调用,当数据更新了,在dom中渲染后,自动执行该函数。

注意:Vue 实现响应式并不是数据发生变化之后 DOM 立即变化,而是按一定的策略进行 DOM 的更新。$nextTick 是在下次 DOM 更新循环结束之后执行延迟回调,在修改数据之后使用 $nextTick,则可以在回调中获取更新后的 DOM.

何时使用nextTick()?

  1. Vue生命周期的created()钩子函数进行的DOM操作一定要放在Vue.nextTick()的回调函数中。因为在created()钩子函数执行的时候Dom其实并未进行任何渲染,所以不可操作dom,此处进行的dom操作的js代码一定放在Vue.nextTicj()的回调函数中。相对应的mounted()钩子函数,该钩子函数执行时所有的DOM挂载已完成。


    image.png
  2. 当在项目中要在改变DOM元素的数据后基于新的DOM进行一系列的js操作都需要放在Vue.nextTick()的回调函数中。(更改数据后,立即使用js操作新的视图时)。


    image.png
  3. 在使用某些第三方插件时,希望在vue生成的某些dom动态发生变化时重新应用该插件,需要在$nextTick()的回调函数中执行重新应用插件的方法。

Vue.nextTick(callback)使用原理:

Vue是异步执行DOM更新的,一旦观察到数据变化,Vue就会开启一个队列,然后把在同一个事件循环中观察到数据变化的watcher推送进该队列。如果这个watcher被触发多次,只被推送到队列一次。这种缓冲行为可以有效的去掉重复数据造成的不必要的计算和DOM操作。在下一个事件循环时,Vue会清空队列,并进行必要的DOM更新。当你设置 vm.someData = 'new value',DOM 并不会马上更新,而是在异步队列被清除,也就是下一个事件循环开始时执行更新时才会进行必要的DOM更新.

你可能感兴趣的:(vue.nextTick(callback))