首页 > 其他分享 >nextTick简介

nextTick简介

时间:2022-09-26 16:00:55浏览次数:39  
标签:nextTick clientHeight 高度 console 简介 list 列表

在说nextTick之前,我们先介绍一下这节课案例的需求,我们还是有一个数组,里面有几个超级英雄,把他们渲染到了一个ul里,我们现在要获取这个ul的高度

<template>
  <div>
    <ul ref="list">
      <li v-for="(item, index) in list" :key="index">
        {{ item }}
      </li>
    </ul>
  </div>
</template>

<script>
// nextTick
export default {
  name: 'App',
  data() {
    return {
      list: ['钢铁侠', '蜘蛛侠', '美国队长', '蝙蝠侠'],
    }
  },
  mounted() {
    console.log('列表的高度是:' + this.$refs.list.clientHeight)
  },
}
</script>

<style></style>

这些代码大家应该已经熟悉了,顺便复习一下ref
这时候的输出是

列表的高度是:84
我们再增加一下内容,增加一个按钮,点击后给列表增加一个超级英雄,然后再获取一下列表高度

<template>
  <div>
    <ul ref="list">
      <li v-for="(item, index) in list" :key="index">
        {{ item }}
      </li>
    </ul>
    <button @click="onAdd">增加</button>
  </div>
</template>

<script>
// nextTick
export default {
  name: 'App',
  data() {
    return {
      list: ['钢铁侠', '蜘蛛侠', '美国队长', '蝙蝠侠'],
    }
  },
  mounted() {
    console.log('列表的高度是:' + this.$refs.list.clientHeight)
  },
  methods: {
    onAdd() {
      this.list.push('闪电侠')
      console.log('列表的高度是:' + this.$refs.list.clientHeight)
    },
  },
}
</script>

<style></style>

我们运行、点击一下发现,其他都没有问题,闪电侠也显示在页面上了,但是打印的还是原来的高度,列表的高度是:84

按说增加了元素高度应该增加啊
问题在于我们改变list的值时,vue并不是立刻去更新dom,而是在一个事件循环最后再去更新dom,这样可以避免不必要的计算和dom操作,对提高性能非常重要。
那么我们需要在dom更新完成后,再去获取ul的高度,这时候就需要用到nextTick了,
nextTick是一个函数,它接受一个函数作为参数,nextTick官网定义是‘将回调推迟到下一个 DOM 更新周期之后执行’,
这么说都过于抽象,直接看代码吧
    onAdd() {
      this.list.push('闪电侠')
      this.$nextTick(() => {
        console.log('列表的高度是:' + this.$refs.list.clientHeight)
      })
    },

简单来说,就是我们把获取高度的代码稍微延迟一点执行,就可以获取到ul的正确高度了

列表的高度是:105

标签:nextTick,clientHeight,高度,console,简介,list,列表
From: https://www.cnblogs.com/Ma-YuHao/p/16731234.html

相关文章

  • 知识点2-1 B+树(5)myISAM简介
    myISAM简介MyISAM的B+Tree的叶子节点上的data,并不是数据本身,而是数据存放的地址。主索引和辅助索引没啥区别,只是主索引中的key一定得是唯一的。这里的索引都是非聚簇索引......
  • 机器学习简介
    1.人工智能发展必备三要素数据、算法、计算力(CPU\GPU\TPU)CPU、GPU对比:CPU适合IO密集型任务;GPU适合计算密集型任务。2.人工智能、机器学习、深度学习关系人工智......
  • Vue的nextTick的原理
    知识储备:事件循环有宏任务和微任务,宏任务所处的队列就是宏任务队列,队列可以有多个,第一个队列只有一个任务就是执行主线程的js代码,剩余队列任务有setTimeoutsetInterval微......
  • pycharm简介及python基础知识
    1、昨日内容回顾计算机五大组成部分(补充)控制器与运算器合称CPU。储存器分内存(临时)与外存(长久)。计算机三大核心硬件CPU,计算机的中枢神经,程序运行必须依靠CPU。内......
  • Splunk简介,部署,使用
    简介Splunk是一款功能强大,功能强大且完全集成的软件,用于实时企业日志管理,可收集,存储,搜索,诊断和报告任何日志和机器生成的数据,包括结构化,非结构化和复杂的多行应用程序日志......
  • Java 简介:第 1 条
    Java简介:第1条最安全、最便携的Java是的..Java是所有面向对象语言中最安全和最可移植的语言。但是,如何?我们应该问一下Java的构思者JamesGosling吗?当然,他可......
  • nextTick解释与应用
    官网解释:在下次DOM更新循环结束之后执行延迟回调。在修改数据之后立即使用这个方法,获取更新后的DOM。实例演示template<p><buttonv-on:click="change">changeTxt......
  • Python 简介
    ###本简介浓缩了一些基本概念,并且随着学习会不断增加跟新### Python是一种解释型的面向对象的语言。由GuidoVanRossum于1989年发明,1991年公布。网站www.python.o......
  • Flask 学习-1.简介与环境准备
    前言Flask是由python开发的轻量的web框架,小巧,灵活,一个脚本就可以启动一个web项目,上手非常容易。Flask和Django框架对比Django:大而全,有一套完整的框架,但是耦合性高......
  • MyBatis 简介
    MyBatisMyBatis是一款优秀的持久层框架,用于简化JDBC开发官网:https://mybatis.net.cn/ 持久层负责将数据保存到数据库的那一层代码javaEE三层架构:表现层、业......