Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >vue归纳笔记:对vue中nextTick()的理解及应用场景说明

vue归纳笔记:对vue中nextTick()的理解及应用场景说明

作者头像
用户1272076
发布于 2019-06-13 04:48:57
发布于 2019-06-13 04:48:57
96100
代码可运行
举报
文章被收录于专栏:张培跃张培跃
运行总次数:0
代码可运行
异步更新队列:

请记住:vue是依靠数据驱动视图更新的,该更新的过程是异步的。即:当侦听到你的数据发生变化时, Vue将开启一个队列(该队列被Vue官方称为异步更新队列)。视图需要等队列中所有数据变化完成之后,再统一进行更新。

示例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<div id="myApp">    <input type="button" value="点我呀" @click="changeStr">    <p ref="myP">{{str}}</p></div><script>    new Vue({        el:"#myApp",        data:{            str:"公众号 张培跃,关注它的人很少!"        },        methods:{            changeStr(){                this.str = "欢迎关注公众号 张培跃,收看更多精彩内容!";                // 输出结果:公众号 张培跃,关注它的人很少!                console.log(this.$refs.myP.innerText)            }        }    })</script>

通过以上示例的输出结果可以有力证明:Vue 实现的响应式并不是数据发生变化之后视图立即变化。


获取更新之后的DOM

Vue官方为了避免开发者直接接触视图,鼓励大家以"数据驱动"的方式进行思考。但,现在的我们想基于更新后的视图来搞点事情,该如何下手?

我们可以使用 $nextTick(callback)。这里的回调函数( callback)将在数据更新完成,视图更新完毕之后被调用。

更改上个示例中的changeStr方法如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
changeStr(){    this.str = "欢迎关注公众号 张培跃,收看更多精彩内容!";    this.$nextTick(()=>{        // 输出结果:我爱你中国,我亲爱的母亲!        console.log(this.$refs.myP.innerText);    });    this.str = "我爱你中国,我亲爱的母亲!"}

从输出的结果可以看出:我们可以通过 $nextTick() 获取到更新之后的 DOM

因为 $nextTick() 返回一个 Promise 对象,所以我们也可以使用async/await语法完成相同的事情:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
changeStr:async function(){    this.str = "欢迎关注公众号 张培跃,收看更多精彩内容!";    this.str = "我爱你中国,我亲爱的母亲!"    await this.$nextTick();    console.log(this.$refs.myP.innerText);}

或者

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
changeStr(){    this.str = "欢迎关注公众号 张培跃,收看更多精彩内容!";    this.$nextTick().then(()=>{        // 输出结果:我爱你中国,我亲爱的母亲!        console.log(this.$refs.myP.innerText);    });    this.str = "我爱你中国,我亲爱的母亲!"}

应用场景

1、如果要在 created()钩子函数中进行的 DOM操作,由于 created()钩子函数中还未对DOM进行任何渲染,所以无法直接操作,需要通过 $nextTick()来完成。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
created(){    this.$nextTick(()=>{        this.$refs.myP.innerText = "我是一只小小小小鸟,想要飞,却怎么样也飞不高!";    });}

注:在 created()钩子函数中进行的 DOM操作,不使用 $nextTick()会报错:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//  Error in created hook: "TypeError: Cannot set property 'innerText' of undefined"created(){    this.$refs.myP.innerText = "我是一只小小小小鸟,想要飞,却怎么样也飞不高!";}

2、更新数据后,想要使用js对新的视图进行操作时。示例(略)

3、在使用某些第三方插件时 ,这些插件需要dom动态变化后重新应用该插件,这时候就需要使用 $nextTick()来重新应用插件的方法。示例(略)

—————END—————

张培跃,收看更多精彩内容

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-06-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 张培跃 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Vue.nextTick核心原理
相信大家在写vue项目的时候,一定会发现一个神奇的api,Vue.nextTick。为什么说它神奇呢,那是因为在你做某些操作不生效时,将操作写在Vue.nextTick内,就神奇的生效了。那这是什么原因呢?
yyds2026
2022/10/18
5670
Vue中的nexTick()
获取更新后的DOM言外之意就是,操作需要用到了更新后的DOM而不能使用之前的DOM或者使用更新前的DOM会出问题,所以就衍生出了这个获取更新后的 DOM的Vue方法。所以放在Vue.nextTick()回调函数中的执行的应该是会对DOM进行操作的 JS代码。
刘亦枫
2020/03/19
1.7K0
Vue.nextTick 的应用解析
在弹窗表单里,经常关闭打开要重置整个表单,使用 this.$refs.addForm.resetFields()
Krry
2020/03/07
7770
nextTick的使用场景和基本用法
写在前面 这篇文章有点划水,因为只是讲了一个vue里很简单的一个知识点,但是还是要写,因为vue的知识点还是要写完的,趁着这几天不上班,将之前欠下来的知识点全部补充上来,后面可能就不再更新关于vue2.0的东西了,今天这篇文章写的是关于vue中nextTick的使用以及他的使用场景和他的作用 使用场景和作用 nextTick是vue提供出来更新视图之后回调的函数,也就是说我们在操作dom更新视图的时候,由于vue的视图渲染是异步的,可能会导致一些视图已经更新了,但是我们获取到的视图数据信息不是最新的
何处锦绣不灰堆
2022/05/23
6150
nextTick的使用场景和基本用法
懂个锤子Vue 项目工程化扩展:
前言:当然既然学习框架的了,HTML+CSS+JS三件套必须的就不说了: JavaScript 快速入门
Java_慈祥
2024/07/29
1280
懂个锤子Vue 项目工程化扩展:
vue的$nextTick的使用+源码分析
时隔五个月,我又开始更新公众号博客了。最近自己有点懒散,造成这么长一段时间公众号和博客断更了,在这里对关注我的各位同学们说声抱歉!!
吴佳
2022/09/26
4810
前端常考vue面试题(必备)_2023-03-15
computed 内部实现了一个惰性的 watcher,也就是 computed watcher,computed watcher 不会立刻求值,同时持有一个 dep 实例。
yyds2026
2023/03/15
1.1K0
Vue3.0马上就要来了,TypeScript学会了没?
大家都知道Vue的作者是尤雨溪,而像尤雨溪这种神级的开发者可能真的具有想改变世界的想法。而有的小伙伴可能要想:神也是人,改变世界也需要钱啊!而Vue既然是一款免费的框架,那它又是如何盈利的呢?首先Vue的发展很顺畅,其用户也非常活跃,并且也为众多的开发者创造了价值!大家可以假设一下:如果有一万个人在使用其框架,其中百分之一的人愿意每月给予作者10美元的赞助,其生存应该不会有太大问题。而Vue的用户何止一万人!
用户1272076
2019/03/26
1.9K0
Vue3.0马上就要来了,TypeScript学会了没?
京东前端二面必会vue面试题(持续更新中)_2023-02-24
Vue 实例有⼀个完整的⽣命周期,也就是从开始创建、初始化数据、编译模版、挂载Dom -> 渲染、更新 -> 渲染、卸载 等⼀系列过程,称这是Vue的⽣命周期。
用户10377014
2023/02/24
8680
vue入门基础教程之经验总结篇(小白入门必备)|建议收藏「建议收藏」
组件里定义的prop都是单向数据流,只能通过父级组件对齐进行修改,组件本身不能修改props的值,只能修改定义在data里的数据,非要修改,也是通过后面介绍的自定义事件通知父级,由父级来修改;
全栈程序员站长
2022/09/05
4.3K0
Vue(v2.6.11)万行源码生啃,就硬刚!
众所周知,以下代码就是 vue 的一种直接上手方式。通过 cdn 可以在线打开 vue.js。一个文件,一万行源码,是万千开发者赖以生存的利器,它究竟做了什么?让人品味。
掘金安东尼
2024/01/27
4050
Vue(v2.6.11)万行源码生啃,就硬刚!
他写出了 Vue,却做不对这十道 Vue 笔试题
请原谅我起了这么个浓浓营销号味道的标题。但这可丝毫没有夸大宣传,而是前端娱乐圈今日份的瓜——
苏南
2020/12/16
3780
他写出了 Vue,却做不对这十道 Vue 笔试题
从源码解读 - Vue常考面试题
SPA( single-page application )仅在 Web ⻚⾯初始化时加载相应的 HTML、JavaScript 和 CSS。⼀旦⻚⾯加载完成,SPA 不会因为⽤户的操作⽽进⾏⻚⾯的重新加载或跳转;取⽽代之的是利⽤路由机制实现 HTML 内容的变换,UI 与⽤户的交互,避免⻚⾯的重新加载。
秋风的笔记
2020/10/27
3K0
2021vue经典面试题_vue面试题大全
ViewModel 监听模型数据的改变和控制视图行为、处理用户交互,简单理解就是一个同步View 和 Model的对象,连接Model和View。
全栈程序员站长
2022/11/10
2.1K0
2021vue经典面试题_vue面试题大全
你不知道的React 和 Vue 的20个区别【源码层面】
面试竞争力越来越大,是时候撸一波Vue和React源码啦; 本文从20个层面来对比Vue和React的源码区别; 文章源码:请戳,原创码字不易,欢迎star!
火狼1
2020/07/08
1.6K0
你不知道的React 和 Vue 的20个区别【源码层面】
【Vue.js】934- 一文带你掌握Vue3新特性,再也不怕面试官啦
在Vue2.x时,我们要想给子组件传值,还得单独传入。Vue3.x直接以v-model:xxx形式传入参数,并且配合修饰符.sync进行数据同步更新。
pingan8787
2021/04/26
1.4K0
【Vue.js】934- 一文带你掌握Vue3新特性,再也不怕面试官啦
一面高频vue面试题
eventBus事件总线适用于父子组件、非父子组件等之间的通信,使用步骤如下: (1)创建事件中心管理组件之间的通信
bb_xiaxia1998
2022/10/28
8140
【必看】58 道 Vue 常见面试题集锦,涵盖入门到精通,自测 Vue 掌握程度
不同点: 实现本质方法不同,v-show 本质就是通过控制 css 中的 display 设置为 none,控制隐藏,只会编译一次;v-if 是动态的向 DOM 树内添加或者删除 DOM 元素,若初始值为 false ,就不会编译了。而且 v-if 不停的销毁和创建比较消耗性能。总结:如果要频繁切换某节点,使用 v-show (切换开销比较小,初始开销较大)。如果不需要频繁切换某节点使用 v-if(初始渲染开销较小,切换开销比较大)。
web前端学习圈
2020/06/18
1.2K0
【必看】58 道 Vue 常见面试题集锦,涵盖入门到精通,自测 Vue 掌握程度
【初级】个人分享Vue前端开发教程笔记
每天学习编程,让你离梦想更新一步,感谢不负每一份热爱编程的程序员,不论知识点多么奇葩,和我一起,让那一颗四处流荡的心定下来,一直走下去,加油,2021加油!
达达前端
2021/02/04
4.9K0
2021前端高级面试题_2021前端面试题目100及最佳答案
1、CSS选择器样式优先级 2、CSS实现三列布局(左右固定宽度,中间自适应) (1)CSS浮动 第一个float:left,第二个float:right,第三个设置margin-left和margin-right (2)绝对定位法 第一个定位到left,第二个定位到right,第三个设置margin-left和margin-right (3)flex布局
全栈程序员站长
2022/09/27
8400
2021前端高级面试题_2021前端面试题目100及最佳答案
相关推荐
Vue.nextTick核心原理
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档