Vue 中 $nextTick() 讲解

简介: -----本文作者:Villin-----$nextTick()用法:this.$nextTick(),在下次 DOM 更新循环结束之后执行延迟回调。什么意思?来看一个简单的小例子,感受一下 $nextTick() 是干嘛的:两个div,一个button按钮<div ref="onedi...

-----本文作者:Villin-----

$nextTick()用法:

this.$nextTick(),在下次 DOM 更新循环结束之后执行延迟回调。

什么意思?
来看一个简单的小例子,感受一下 $nextTick() 是干嘛的:

两个div,一个button按钮

<div ref="onediv">{{ onediv }}</div>                        第一个div
<div>{{ twodiv }}</div>                                       第二个div
<button @click="handleClick">点击我将000改成456</button>

将一个div默认值设为123,第二个默认值设为000

data() {
    return {
      onediv: "123",
      twodiv: "000"
    };
  }

当我点击按钮的时候,将第一个div的值123改变成456,同时获取到div改变后的值456,赋给第二个div。也就是说结果两个div都应该为456.

methods: {
    handleClick() {
      this.onediv = "456";
      this.twodiv = this.$refs.onediv.innerHTML;   // 通过原生$ref获取到第一个div改变后的值,然后赋给第二给div
      console.log(this.twodiv);
    }
  }

我们点击后查看

image

我们发现,第一个div确实是改变了,但是第二个div获取到的值却是第一个div之前的值,因为Dom还没有更新循环完,所以它的值还是123。回过头看一下 $nextTick 的用法介绍,就知道了,所以这个时候我们想获取到div更改后的值,就需要用到 $nextTick我们用 $nextTick 将它包裹起来,等到Dom节点渲染循环完,我们再取值,再赋值。

  methods: {
    handleClick() {
      this.onediv = "456";
      this.$nextTick(() => {
        this.twodiv = this.$refs.onediv.innerHTML; // 通过原生$ref获取到第一个div改变后的值,然后赋给第二给div
        console.log(this.twodiv);
      });
    }
  }

image

其实this.$nextTick用法到这里也就完了,我们也可以按照nextTick的中文意思(节点的下一步)来真正理解它的含义了,也就是等到Dom节点结束后再执行下一步的操作。那么我再多说一些:

刚才的案例,同时也说明了一个问题,Vue 在更新 DOM 时是异步执行的。所以this.$nextTick是处理异步的一个回调函数,它返回的是一个promise对象,那么我们这个代码也可以用promise来改写,我们可以用 ES7 async/await 语法完成相同的事情:

  methods: {
    async handleClick() {
      this.onediv = "456";
      await this.$nextTick(); // await 等待返回值后,再执行下面的事情。
      this.twodiv = this.$refs.onediv.innerHTML; // 通过原生$ref获取到第一个div改变后的值,然后赋给第二给div
      console.log(this.twodiv);
    }
  }

结果也是一样的。

目录
相关文章
|
1天前
|
设计模式 JavaScript 前端开发
Vue源码学习需要哪些工具和技能
【4月更文挑战第20天】学习Vue源码需具备的工具与技能:VS Code或WebStorm作为代码编辑器,Node.js与npm管理依赖,Git操作仓库。基础包括JavaScript、ES6+语法、前端知识(HTML/CSS/浏览器原理)及Vue基础知识。进阶则需源码阅读理解能力,调试技巧,熟悉设计模式和架构思想。学习方法强调系统学习、实践与持续关注Vue最新动态。
17 8
|
1天前
|
JavaScript 前端开发 编译器
Vue 源码学习路线
【4月更文挑战第20天】探索Vue源码涉及响应式系统、虚拟DOM、模板编译等核心概念。先掌握Vue基础知识、JavaScript(ES6+)和前端工程化。从源码入口文件开始,研究响应式、虚拟DOM、模板编译、实例方法、全局API及生命周期。理解编译器和渲染器工作原理,实践编写Vue插件,参与开源项目,阅读相关文章教程,持续关注Vue最新动态。这是一个循序渐进、需要耐心和实践的过程。
7 1
|
1天前
|
JavaScript 前端开发
鼠标监视 | 拖拽方块 | Vue
鼠标监视 | 拖拽方块 | Vue
5 0
|
1天前
|
JavaScript
Vue控制是否禁用disabled属性
Vue控制是否禁用disabled属性
6 1
|
1天前
|
JavaScript 前端开发
Vue鼠标悬浮切换图片
Vue鼠标悬浮切换图片
6 0
|
1天前
|
JavaScript 前端开发 内存技术
Vue入门:构建你的第一个Vue应用程序
【4月更文挑战第22天】Vue.js 入门教程:安装 Node.js 和 npm,使用 Vue CLI (`npm install -g @vue/cli`) 创建项目,选择预设或自定义配置。在 `src/components/` 创建 `HelloWorld.vue` 组件,显示数据属性。在 `App.vue` 中引入并注册组件,启动开发服务器 (`npm run serve`) 预览。开始你的 Vue 之旅!
|
1天前
|
JavaScript 前端开发 UED
动画效果:给 Vue 应用添加过渡和动画
【4月更文挑战第22天】Vue 框架提供强大的过渡和动画功能,增强用户体验,创建流畅的用户界面。通过CSS动画、设置过渡属性和自定义过渡,开发者能实现多样化效果。同时,结合组件状态、关注性能并测试优化,确保在不同设备上运行良好,打造引人入胜的应用交互。
|
4天前
|
JavaScript
Ant design Vue 父子组件传递(代码案例--不懂的地方可以私信本博主)
Ant design Vue 父子组件传递(代码案例--不懂的地方可以私信本博主)
10 0
|
4天前
|
JavaScript 前端开发
ant design vue 配置菜单外部打开
ant design vue 配置菜单外部打开
12 0
|
4天前
|
JavaScript
ant design vue 在列表中使用插槽 例如当性别为0的时候在列表中我想显示男
ant design vue 在列表中使用插槽 例如当性别为0的时候在列表中我想显示男
7 0