nextTick 详解

这是官网的解释,比较简洁精炼,反正我是第一遍什么都没看懂

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

经过我一步步测试,我觉得应该是dom操作的最后一帧的意思

  1. 测试代码
	<div id="app" @click="handler">{{ msg }}</div>

	new Vue({
el: '#app',
data: {
msg: "hello world"
}
methods: {
handler() {
this.msg = "改变dom的顺序1"
this.$nextTick(()=>{ //最后一帧 ,所有的dom操作都更新完成后
console.log(this.msg, "最后一帧")
})
}
}
})

此时运行代码,控制台输出 “改变dom的顺序1” 正常

  1. 在测试代码的handler方法中添加
	handler() {
this.msg = "改变dom的顺序1"
this.$nextTick(()=>{ //最后一帧 ,所有的dom操作都更新完成后
console.log(this.msg, "最后一帧")
})
his.msg = "改变dom的顺序2 "
}

此时运行代码,控制台输出 “改变dom的顺序2 最后一帧" 看到输出结果肯定开始觉得有点奇怪了

但是如果理解最后一帧的意思,就觉得正常了,所有dom操作都更新完成后

  1. 给vue实力添加一个watch 方法, 代码如下
    watch: {
'msg': function(a,b){
console.log(a,b,"监视数据的新值,旧值得变化")
}
},

此时运行代码,控制台输出

改变dom的顺序2 hello world 监视数据的新值,旧值得变化

改变dom的顺序2 最后一帧

看到这里就会非常奇怪,为什么最后一帧, 会在watch监视数据后面打印出来

个人见解是: 当整个组件都没事了之后,下一帧(最后一帧)

  1. 最后我们来修改一下handler的代码
	handler() {
this.msg = "改变dom的顺序1"
this.$nextTick((a,b,c)=>{ //最后一帧 ,所有的dom操作都更新完成后
console.log(this.msg, "最后一帧")
})
console.log("非dom操作1") //第四步增加的
this.msg = "改变dom的顺序2"
console.log("非dom操作2") //第四步增加的
}

此时控制台输出的是

非dom操作1
非dom操作2
改变dom的顺序2 hello world 监视数据的新值,旧值得变化
改变dom的顺序2 最后一帧

此时的输出结果比较符合这个结论===当整个组件都没事了之后,下一帧(最后一帧)

Vue nextTick 学习历程的更多相关文章

  1. vue api学习之nextTick的理解

    对于 Vue.nextTick 方法,之前没有听说过,突然听到别人提起,貌似作用挺大.以下为学习心得.官方文档上这样定义:在下次 DOM 更新循环结束之后执行延迟回调.在修改数据之后立即使用这个方法, ...

  2. Vue – 基础学习(3):$forceUpdate()和$nextTick()的区别

    Vue – 基础学习(3):$forceUpdate()和$nextTick()的区别

  3. vue nextTick使用

    Vue nextTick使用 vue生命周期 原因是在created()钩子函数执行的时候DOM 其实并未进行任何渲染,而此时进行DOM操作无异于徒劳,所以此处一定要将DOM操作的js代码放进Vue. ...

  4. Vue – 基础学习(1):对生命周期和钩子函的理解

    一.简介 先贴一下官网对生命周期/钩子函数的说明(先贴为敬):所有的生命周期钩子自动绑定 this 上下文到实例中,因此你可以访问数据,对属性和方法进行运算.这意味着你不能使用箭头函数来定义一个生命周 ...

  5. 前端框架之vue初步学习

    Vue.js介绍: Vue.js是一个构建数据驱动的web界面的渐进式框架.Vue.js的目标是通过尽可能简单的API实现响应的数据绑定和组合的视图组件.它不仅易于上手,还便于与第三方库或既有项目整合 ...

  6. 前端 | Vue nextTick 获取更新后的 DOM

    前两天在开发时遇到一个需求:打开对话框的时候自动聚焦其中的输入框.由于原生的 autofocus 属性不起作用,需要使用组件库提供的 focus 方法手动手动获取焦点.于是有如下代码: <el- ...

  7. vue入门学习(基础篇)

    vue入门学习总结: vue的一个组件包括三部分:template.style.script. vue的数据在data中定义使用. 数据渲染指令:v-text.v-html.{{}}. 隐藏未编译的标 ...

  8. Vue.js学习笔记(2)vue-router

    vue中vue-router的使用:

  9. Vue.js学习 Item12 – 内部响应式原理探究

    深入响应式原理 大部分的基础内容我们已经讲到了,现在讲点底层内容.Vue.js 最显著的一个功能是响应系统 —— 模型只是普通对象,修改它则更新视图.这让状态管理非常简单且直观,不过理解它的原理也很重 ...

随机推荐

  1. 【asp.net core 系列】13 Identity 身份验证入门

    0. 前言 通过前两篇我们实现了如何在Service层如何访问数据,以及如何运用简单的加密算法对数据加密.这一篇我们将探索如何实现asp.net core的身份验证. 1. 身份验证 asp.net ...

  2. 一起玩转微服务(13)——AOP

    一.什么是AOP编程 AOP: Aspect Oriented Programming 面向切面编程. 面向切面编程(也叫面向方面):Aspect Oriented Programming(AOP), ...

  3. 一条SQL删除重复记录,重复的只保留一条

    情景: 我们的数据库中可能会存在很多因各种原因而重复的记录,我们需要对这些重复的记录进行删除,每组组重复的记录只保留一条就行 例如我们有这么个表:两个框框都是有重复记录的,红框和绿框都只需要留下一条, ...

  4. JAVA集合框架 - Collection

    collection大致介绍 Collection是集合层次结构中的根接口. 集合表示一组对象.有些集合允许重复元素,有些则不允许.有些是有序的,有些是无序的. JDK没有提供此接口的任何直接实现:它 ...

  5. 入门大数据---Spark整体复习

    一. Spark简介 1.1 前言 Apache Spark是一个基于内存的计算框架,它是Scala语言开发的,而且提供了一站式解决方案,提供了包括内存计算(Spark Core),流式计算(Spar ...

  6. vue全家桶(4.3)

    5.3.Vuex的核心概念 store: 每一个 Vuex 应用的核心就是 store(仓库)."store"基本上就是一个容器,它包含着你的应用中大部分的状态 (state) s ...

  7. LeetCode第29场双周赛题解

    第一题 用一个新数组newSalary保存去掉最低和最高工资的工资列表,然后遍历newSalary,计算总和,除以元素个数,就得到了平均值. class Solution { public: doub ...

  8. hive中如何查询除了其中某个字段剩余所有字段

    想要将hive分区表中的某个分区复制到新的分区中,使用如下sql语句 insert overwrite table zcfw_sda.sda04_core_request_base_ratio_ifr ...

  9. Linux CentOS 7 防火墙/端口设置【转发】

    CentOS升级到7之后用firewall代替了iptables来设置Linux端口, 下面是具体的设置方法: []:选填 <>:必填 [<zone>]:作用域(block.d ...

  10. wsl环境下配置ubuntu16.04

    wsl环境下配置ubuntu16.04 在公司同事的安利下,终于给自己用了8年的老笔记本(戴尔XPS L502X)换上了固态硬盘(WD500G,SATA3接口) 当然,系统重装了一遍,所有的软件也都没 ...