美文网首页
2019-02-28 vue nextTick()

2019-02-28 vue nextTick()

作者: 小猪夫人hj | 来源:发表于2019-02-28 11:22 被阅读0次

    原文章地址: https://www.jianshu.com/p/a7550c0e164f
    作者:Ruheng
    来源:简书

    1 为什么用vue nextTick()???

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

    所以就衍生出了这个获取更新后的DOM的Vue方法。所以放在Vue.nextTick()回调函数中的执行的应该是会对DOM进行操作的 js代码

    2 一般应用在哪些地方???

    2-1 Vue生命周期的created()钩子函数进行的DOM操作

    原因:DOM操作是异步的,在created()钩子函数中,数据的改变还不会使DOM更新,因为在mounted之前的钩子函数,还没真正挂载到DOM上,此时操作DOM就得vue nextTick(()=>{ //操作DOM代码 });mounted钩子函数中,el挂载,但DOM并未完全渲染或正在渲染,如需在渲染完之后操作DOM,就放在nextTick()回调函数中去执行DOM操作

    2-2 在数据变化后要执行的某个操作,而这个操作需要使用随数据改变而改变的DOM结构

    原因:Vue 异步执行 DOM 更新。只要观察到数据变化,Vue 将开启一个队列,并缓冲在
    同一事件循环中发生的所有数据改变。如果同一个 watcher 被多次触发,只会被推
    入到队列中一次。这种在缓冲时去除重复数据对于避免不必要的计算和 DOM 操作
    上非常重要。然后,在下一个的事件循环“tick”中,Vue 刷新队列并执行实际 (已去
    重的) 工作。Vue 在内部尝试对异步队列使用原生的 Promise.then 和
    MessageChannel,如果执行环境不支持,会采用 setTimeout(fn, 0)代替。

    例如,当你设置vm.someData = 'new value',该组件不会立即重新渲染。当刷新
    队列时,组件会在事件循环队列清空时的下一个“tick”更新。多数情况我们不需要
    关心这个过程,但是如果你想在 DOM 状态更新后做点什么,这就可能会有些棘
    手。虽然 Vue.js 通常鼓励开发人员沿着“数据驱动”的方式思考,避免直接接触
    DOM,但是有时我们确实要这么做。为了在数据变化之后等待 Vue 完成更新
    DOM ,可以在数据变化之后立即使用Vue.nextTick(callback) 。这样回调函数在
    DOM 更新完成后就会调用。

    相关文章

      网友评论

          本文标题:2019-02-28 vue nextTick()

          本文链接:https://www.haomeiwen.com/subject/ddchuqtx.html