Vue nextTick 学习历程
nextTick 详解
这是官网的解释,比较简洁精炼,反正我是第一遍什么都没看懂
在下次 DOM 更新循环结束之后执行延迟回调。在修改数据之后立即使用这个方法,获取更新后的 DOM。
经过我一步步测试,我觉得应该是dom操作的最后一帧的意思
- 测试代码
<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” 正常
- 在测试代码的handler方法中添加
handler() {
this.msg = "改变dom的顺序1"
this.$nextTick(()=>{ //最后一帧 ,所有的dom操作都更新完成后
console.log(this.msg, "最后一帧")
})
his.msg = "改变dom的顺序2 "
}
此时运行代码,控制台输出 “改变dom的顺序2 最后一帧" 看到输出结果肯定开始觉得有点奇怪了
但是如果理解最后一帧的意思,就觉得正常了,所有dom操作都更新完成后
- 给vue实力添加一个watch 方法, 代码如下
watch: {
'msg': function(a,b){
console.log(a,b,"监视数据的新值,旧值得变化")
}
},
此时运行代码,控制台输出
改变dom的顺序2 hello world 监视数据的新值,旧值得变化
改变dom的顺序2 最后一帧
看到这里就会非常奇怪,为什么最后一帧, 会在watch监视数据后面打印出来
个人见解是: 当整个组件都没事了之后,下一帧(最后一帧)
- 最后我们来修改一下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 学习历程的更多相关文章
- vue api学习之nextTick的理解
对于 Vue.nextTick 方法,之前没有听说过,突然听到别人提起,貌似作用挺大.以下为学习心得.官方文档上这样定义:在下次 DOM 更新循环结束之后执行延迟回调.在修改数据之后立即使用这个方法, ...
- Vue – 基础学习(3):$forceUpdate()和$nextTick()的区别
Vue – 基础学习(3):$forceUpdate()和$nextTick()的区别
- vue nextTick使用
Vue nextTick使用 vue生命周期 原因是在created()钩子函数执行的时候DOM 其实并未进行任何渲染,而此时进行DOM操作无异于徒劳,所以此处一定要将DOM操作的js代码放进Vue. ...
- Vue – 基础学习(1):对生命周期和钩子函的理解
一.简介 先贴一下官网对生命周期/钩子函数的说明(先贴为敬):所有的生命周期钩子自动绑定 this 上下文到实例中,因此你可以访问数据,对属性和方法进行运算.这意味着你不能使用箭头函数来定义一个生命周 ...
- 前端框架之vue初步学习
Vue.js介绍: Vue.js是一个构建数据驱动的web界面的渐进式框架.Vue.js的目标是通过尽可能简单的API实现响应的数据绑定和组合的视图组件.它不仅易于上手,还便于与第三方库或既有项目整合 ...
- 前端 | Vue nextTick 获取更新后的 DOM
前两天在开发时遇到一个需求:打开对话框的时候自动聚焦其中的输入框.由于原生的 autofocus 属性不起作用,需要使用组件库提供的 focus 方法手动手动获取焦点.于是有如下代码: <el- ...
- vue入门学习(基础篇)
vue入门学习总结: vue的一个组件包括三部分:template.style.script. vue的数据在data中定义使用. 数据渲染指令:v-text.v-html.{{}}. 隐藏未编译的标 ...
- Vue.js学习笔记(2)vue-router
vue中vue-router的使用:
- Vue.js学习 Item12 – 内部响应式原理探究
深入响应式原理 大部分的基础内容我们已经讲到了,现在讲点底层内容.Vue.js 最显著的一个功能是响应系统 —— 模型只是普通对象,修改它则更新视图.这让状态管理非常简单且直观,不过理解它的原理也很重 ...
随机推荐
- 多线程集成设计模式--MasterWorker模式讲解(一)
Master-Worker模式是常用的并行模式之一,它的核心思想是,系统有两个进程协作工作:Master进程,负责接收和分配任务:Worker进程,负责处理子任务.当Worker进程将子任务处理完成后 ...
- Python3-shutil模块-高级文件操作
Python3中的shutil模块提供了对文件和容器文件的一些高级操作 shutil.copy(src, dst) 拷贝文件,src和dst为路径的字符串表示,copy()会复制文件数据和文件权限,但 ...
- 云服务器终端命令显示-bash-4.2#怎么解决
原因:删除了root/.bashrc 和 root/.bash_profile两个文件的丢失 解决办法: -bash-4.2# cp /etc/skel/.bashrc /root/ -bash-4. ...
- 【Model Log】模型评估指标可视化,自动画Loss、Accuracy曲线图工具,无需人工参与!
1. Model Log 介绍 Model Log 是一款基于 Python3 的轻量级机器学习(Machine Learning).深度学习(Deep Learning)模型训练评估指标可视化工具, ...
- 学习Java的Day02
知识点 数组: 一维数组 声明: 类型[] 数组名;([] 在前后没有影响,一般写在名称前.) 创建数组 数组名 = new 类型[数组长度]. 数组索引从0开始.获取数组长度:数组名.len ...
- pycharm连接远程服务器(拉取版本)
pycharm连接远程服务器(拉取版本) 有这篇教程是因为,博主有两个办公地点,想着在办公地点A上传代码到服务器并调试,并在B时候可以拉取这份代码,并进行调试.因此有这篇拉取版本的博客,之前还有上传版 ...
- SQLserver , MySQL的区别和各自的一些简单方法案列
SQL Server数据库和MySQL数据库有什么区别呢?今天我们来分析一下这两种数据库的不同之处以及这两种数据库的一些简单用途:SQL Server数据库和MySQL数据库有什么区别: 对于程序开发 ...
- LintCode笔记 - 82.落单的数
这一题相对简单,但是代码质量可能不是很好,我分享一下我的做题笔记以及做题过程给各位欣赏,有什么不足望各位大佬指出来 原题目,各位小伙伴也可以试着做一下 . 落单的数 中文English 给出 * n ...
- mysqladmin 的用法及所带参数
- web 部署专题(零):web相关概念以及原理
1.什么是 nginx Nginx 是高性能的 HTTP 和反向代理的服务器,处理高并发能力是十分强大的,能经受高负载的考验,有报告表明能支持高达 50,000 个并发连接数. 2.正向代理 (1)需 ...