首页 > 其他分享 >this.$nextTick的用法

this.$nextTick的用法

时间:2023-07-24 16:02:22浏览次数:39  
标签:nextTick 回调 DOM 更新 JS 修改 用法

一、总述

定义:在下次 DOM 更新循环结束之后执行延迟回调。在修改数据之后立即使用这个方法,回调函数获取更新后的dom再渲染出来;$nextTick 类似于一个非常高级的定时器,自动追踪DOM更新,更新好了就触发

语法: this.$nextTick( 回调函数 ) ,例如:

// 修改按钮操作
updateCateBtnFn(obj) {
  this.isEdit = true
  this.editId = obj.id
  this.dialogVisible = true
  // $nextTick()回调推迟到下一个 DOM 更新周期之后执行
  this.$nextTick(() => {
    this.addForm.cate_name = obj.cate_name
    this.addForm.cate_alias = obj.cate_alias
  })
}

二、JS的执行机制

JS是单线程语言,即指某一时间内只能干一件事,为什么 JS 不能是多线程呢?多线程就能同一时间内干多件事情了

是否多线程这个取决于语言的用途,一个很简单的例子,如果同一时间,一个添加了DOM,一个删除了DOM,这个时候语言就不知道是该添还是该删了,所以从应用JS只能是单线程

单线程就意味着我们所有的任务都需要排队,后面的任务必须等待前面的任务完成才能执行,如果前面的任务耗时很长,一些从用户角度上不需要等待的任务就会一直等待,这个从体验角度上来讲是不可接受的,所以JS中就出现了异步的概念。

了解了JS的执行机制后,再了解vue中的$nextTick

三、案例

<template>
  <div>
    <button @click="testClick()" ref="a">{{msg}}</button>
  </div>
</template>
 
<script>
export default {
  name: 'HelloWorld',
  data () {
    return {
      msg:"原始值",
    }
  },
  methods:{
    testClick(){
      this.msg="修改值";
      console.log(this.$refs.a.innerText);   //this.$refs.a获取指定DOM,输出:原始值
    }
  }
}
</script>

以上的案例输出的是 “原始值”,并未按照顺序输出 “修改值”,当我们使用this.$nextTick方法后

methods:{
    testClick(){
      this.msg="修改值";
      this.$nextTick(() => {
        console.log(this.$refs.a.innerText);  //输出:修改值
      });
    }
  }

注意:Vue 实现响应式并不是数据发生变化之后 DOM 立即变化,而是按一定的策略进行 DOM 的更新。this.$nextTick的用法_单线程nextTick,则可以在回调中获取更新后的 DOM

四、什么时候需要this.nextTick()

data改变,更新DOM是异步的;DOM更新是异步的 ,Vue 响应式的特征,修改数据后,页面会自动更新,而更新DOM这个操作是异步的 ;这个时候使用 this.$nextTick( 回调函数 ) ,回调函数会在下一次 DOM更新完毕后执行

五、总结

vue在修改数据后 视图(DOM)不会立刻更新,而是等同一事件循环中的所有数据变化完成之后 再统一进行视图更新 所以 在修改数据更新立马读取DOM是获取不到新数据的 , 获取到的原来的DOM函数

使用newxtTick 可以获得DOM更新后的数据 在下次DOM更新之后vue会回调nextTick指定的函数 可以在修改数据之后立即使用这个nextTick方法 在指定的函数里获取更新后的DOM

学习更多vue知识请关注CRMEB


标签:nextTick,回调,DOM,更新,JS,修改,用法
From: https://blog.51cto.com/u_15723831/6836067

相关文章

  • vue中ref的用法
    1,可以引用元素,通过this.$refs.domxx直接操作元素。<divref="domxx"></div>methods:{getxx(){console.log(this.$refs.domxx)//访问DOM元素}}2,可以绑定组件实例,访问组件的属性和方法;参考地址:(22条消息)Vue中ref的用法_我心向阳.的博客-CSDN博客Templ......
  • 2.进程相关命令用法
    ListingProcessesProcesses相关命令的用法psauxaux是参数,不用加扩折号。ps-efvboxuser53774706015:59pts/000:00:00ps-efpgrep-lprocess'sname作用是检索进程id,同时显示进程name。forexample:inbash:pgrep-lsshd696sshdtoptop命令查......
  • SAP UI5 的 Unified Shell 发展历史和用法介绍试读版
    本教程前面的文章,我们介绍了SAPUI5的UIArea:SAPUI5应用开发教程之六番外篇-什么是SAPUI5应用的UIArea以及SAPUI5容器类控件的一些例子,比如Page和Panel控件:SAPUI5应用开发教程之十一:SAPUI5容器类控件Page和Panel在SAPUI5发展历史上,sap.ui.......
  • Python glob库的用法
    一、匹配指定文件夹下的所有文件files=glob.glob("C:\\Users\\liuchunlin2\\Desktop\\测试数据\\*")print(files) 二、递归匹配指定文件夹及其子文件夹下的所有xlsx文件files=glob.glob("C:\\Users\\liuchunlin2\\Desktop\\测试数据\\**\\*.xlsx",recursive=True)p......
  • asp.net中*.ashx文件的用法
    1首先添加一个ashx文件!开始:通过这几个步骤你可以添加一个新的ashx文件:打开你的ASP.NETwebsite;右击项目选择“AddNewItem...”;将显示一个“AddNewItem”的对话框,选择“GenericHandler”。此时,你就会得到一个新的ashx文件。2.自动生成代码我们需要注意的是在ashx文件中......
  • 9探索Java内置函数的隐藏功能和高级用法
     Java作为一种广泛使用的编程语言,拥有丰富的内置函数库,这些函数可以大大简化开发过程,并提供了许多强大的功能。然而,除了常见的用法之外,Java内置函数还具有一些隐藏的功能和高级用法,这些功能和用法可能被开发者所忽视,但却能提高代码的效率和可读性。本文将围绕这一主题,探索Java内......
  • set的用法
    1.set的初始化set<int>number={5,2,3,1,7,8,3,5,9,6};2.set查找操作//set的特征//1、存放的是key值,key值是唯一的,不能重复//2、默认会按照key值升序排列//3、底层使用的是红黑树的数据结构21set<int>number={5,2,3,1,7,8,......
  • list的用法
    0.display函数使用泛型,定义打印函数。template<typenameContainer>voiddisplay(Container&con){for(auto&elem:con){cout<<elem<<"";}cout<<endl;}1.初始化list<int>number={......
  • vector的用法
    1.打印函数12template<typenameContainer>13voiddisplay(Container&con){14for(auto&elem:con){15cout<<elem<<"";16}17cout<<endl;18}......
  • FCKEditor用法
    FCKeditor2.1.1在ASP.NET中的设置和使用(ZT)昨天抛弃了FreeTextBox1.6中文版,改用FCKeditor2.1.1。FCKeditor不仅加上了FLASH插入功能,而且它的兼容性超强:支持多种浏览器包括IE5.5+、Firefox1.0+、Mozilla1.3、Netscape7+;无平台限制,在Windows、Mac、Linux下都能运行;可以和......