关于vue中的nextTick深入理解

定义[nextTick、事件循环]

  nextTick的由来:

    由于VUE的数据驱动视图更新,是异步的,即修改数据的当下,视图不会立刻更新,而是等同一事件循环中的所有数据变化完成之后,再统一进行视图更新。

  nextTick的触发时机:

    在同一事件循环中的数据变化后,DOM完成更新,立即执行nextTick(callback)内的回调。

  应用场景:

    需要在视图更新之后,基于新的视图进行操作。

  以上出现了事件循环的概念,其涉及到JS的运行机制,包括主线程的执行栈、异步队列、异步API、事件循环的协作,此处不展开之后再总结。大致理解:主线程完成同步环境执行,查询任务队列,提取队首的任务,放入主线程中执行;执行完毕,再重复该操作,该过程称为事件循环。而主线程的每次读取任务队列操作,是一个事件循环的开始。异步callback不可能处在同一事件循环中。

  简单总结事件循环:

    同步代码执行 -> 查找异步队列,推入执行栈,执行callback1[事件循环1] ->查找异步队列,推入执行栈,执行callback2[事件循环2]...

  即每个异步callback,最终都会形成自己独立的一个事件循环。

  结合nextTick的由来,可以推出每个事件循环中,nextTick触发的时机:

    同一事件循环中的代码执行完毕 -> DOM 更新 -> nextTick callback触发

  tips:本文的任务队列、消息队列、异步队列指同一个东西,均指macrotask queue。

       事件循环详解:http://www.cnblogs.com/hity-tt/p/6733062.html

watch:{
     type: function (val, oldVal) {
         if(val==2){
             Vue.nextTick(function () {   //或者用 this.$nextTick
                 $(‘#select‘).selectpicker();
              })
      }
     }
}

原文地址:https://www.cnblogs.com/kennyliu/p/8718559.html

时间: 2024-08-27 07:02:43

关于vue中的nextTick深入理解的相关文章

详解Vue中的nextTick

Vue中的nextTick涉及到Vue中DOM的异步更新,感觉很有意思,特意了解了一下.其中关于nextTick的源码涉及到不少知识,很多不太理解,暂且根据自己的一些感悟介绍下nextTick. 一.示例 先来一个示例了解下关于Vue中的DOM更新以及nextTick的作用. //模板 <div class="app"> <div ref="msgDiv">{{msg}}</div> <div v-if="msg1

vue中的$nextTick()

vue中$nextTick()作用 1.vue更新数据是异步的 1.0中确实是通过v-el:xxx标记dom然后在组件里通过this.$els.xxx就可以获得这个dom对象了,$nextTick(() => {})与dom相关操作写在该函数回调中,确保DOM已渲染. 2.什么是Vue.nextTick() 在下次DOM更新循环结束之后执行延迟回调,在修改数据之后立即使用这个方法,获取更新后的DOM.所以就衍生出了这个获取更新后的DOM的Vue方法.所以放在Vue.nextTick()回调函数中

vue中的插槽slot理解

本篇文章参考赛冷思的个人博客 1.函数默认传参 在我们写js函数我们的可能会给他们一个默认的参数,写法是 function show(age,name){ var age = age || 20; var name = name || 张三; console.log(age,name); } show(); // 20,张三 show(18,"命名") // 18,明明 如果用户不传入参数,那么会输出默认值,如果用户传入,会输出传入的值,这种写法很灵活 vue中的组件,也可以有默认的模

vue中mixin的一点理解

vue中提供了一种混合机制--mixins,用来更高效的实现组件内容的复用.最开始我一度认为这个和组件好像没啥区别..后来发现错了.下面我们来看看mixins和普通情况下引入组件有什么区别? 组件在引用之后相当于在父组件内开辟了一块单独的空间,来根据父组件props过来的值进行相应的操作,单本质上两者还是泾渭分明,相对独立. 而mixins则是在引入组件之后,则是将组件内部的内容如data等方法.method等属性与父组件相应内容进行合并.相当于在引入后,父组件的各种属性方法都被扩充了. 单纯组

聊聊VUE中的nextTick

在谈nextTick之前,先要说明一件事,可能在我们平时使用vue时并没有关注到,事实上,vue执行的DOM更新是异步的. 举个栗子: <template> <div class="con">{{msg}}</div> <template> <script> export default{ data(){ return{ msg:0, } }, mounted(){ this.msg = 1000; console.log(d

vue中的nextTick

vue.nextTick的官方定义是:在下次 DOM 更新循环结束之后执行延迟回调.在修改数据之后立即使用这个方法,获取更新后的 DOM. 实际上也就是传进来的函数延迟到dom更新后再使用,也就是延迟执行了代码下面有个网上的小例子:<div class="app"><div id="msgDiv">{{msg}}</div><div v-if="msg1">Message got outside $

vue中return的用法理解

在做项目的时候有的时候项目紧急,所以只需要知道如何使用一下方法实现相应的功能,没得停留下来研究理解为什么要这样使用,所以今天趁不忙就写一下自己对return的理解,一方面是加深自己的理解,另一方面也希望能帮助到需要的人! 我先抛出一个简单的问题:return后面可以跟执行语句或者函数么? 答案:可以! 但是有一点,return不论是什么,都是直接返回,即使是语句或者函数也不会执行的!是函数就返回该函数! 下面从一个例子来加深对return用法的理解: export function getTab

vue中nextTick的理解

A. vue 中的 nextTick 是什么? 1.首先需要清楚,nextTick是一个函数:这个函数的作用,简单理解就是下一次渲染后才执行 nextTick 函数中的操作: 2.在下一次 DOM 更新循环结束之后延迟回调,也就是延迟执行一段代码. B. 什么情况下使用 nextTick 函数? 当项目数据改变后,需要对新改动的元素进行视图操作的时候,可能数据值已经进行修改,但是视图还没更新,直接操作报错的时候: C. nextTick函数解决什么问题? 数据值修改,视图没有立即更新,直接使用提

----Vue 中mixin 的用法详解----

说下我对vue中mixin的一点理解 vue中提供了一种混合机制--mixins,用来更高效的实现组件内容的复用.最开始我一度认为这个和组件好像没啥区别..后来发现错了.下面我们来看看mixins和普通情况下引入组件有什么区别? 组件在引用之后相当于在父组件内开辟了一块单独的空间,来根据父组件props过来的值进行相应的操作,单本质上两者还是泾渭分明,相对独立. 而mixins则是在引入组件之后,则是将组件内部的内容如data等方法.method等属性与父组件相应内容进行合并.相当于在引入后,父