欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Vue中this.$nextTick()的具體使用

 更新時間:2023年02月06日 08:31:14   作者:Litt_White  
本文主要介紹了Vue中this.$nextTick()的具體使用,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

1、官網(wǎng)說法

在下次 DOM 更新循環(huán)結(jié)束之后執(zhí)行延遲回調(diào)。在修改數(shù)據(jù)之后立即使用這個方法,獲取更新后的 DOM。

核心點有2個:DOM 更新獲取更新后的 DOM。

DOM 更新,可以理解為:Vue 的DOM更新機制,那 Vue 的DOM更新機制是什么?

2、DOM 更新

首先,我們要知道:Vue實現(xiàn)響應(yīng)式并不是數(shù)據(jù)發(fā)生變化之后DOM立即變化,而是異步執(zhí)行DOM更新的。

通過代碼我們驗證下:不是數(shù)據(jù)發(fā)生變化之后DOM立即變化

<template>
  <div class="test">
    <div>
      <button @click="test" ref="btn">{{ msg }}</button>
    </div>
  </div>
</template>
<script>
export default {
  data () {
    return {
      msg: '按鈕'
    }
  },
  methods: {
    test () {
      this.msg = '信息改變了。。。。'
      console.log('打印結(jié)果:' + this.$refs.btn.innerText) // 打印結(jié)果:按鈕
    }
  }
}
</script>

此時log結(jié)果是:打印結(jié)果:‘按鈕‘。而不是后來的 ‘信息改變了。。。。’,
原因:Vue的響應(yīng)式是異步執(zhí)行DOM更新。

異步執(zhí)行DOM更新

Vue 在更新 DOM 時是異步執(zhí)行的。只要偵聽到數(shù)據(jù)變化,Vue 將開啟一個隊列,并緩沖在同一事件循環(huán)中發(fā)生的所有數(shù)據(jù)變更。如果同一個 watcher 被多次觸發(fā),只會被推入到隊列中一次。這種在緩沖時去除重復(fù)數(shù)據(jù)對于避免不必要的計算和 DOM 操作是非常重要的。然后,在下一個的事件循環(huán) “tick" 中,Vue 刷新隊列并執(zhí)行實際(已去重的)工作。

在這里插入圖片描述

(1)所有同步任務(wù)都在主線程上執(zhí)行,形成一個執(zhí)行棧(execution context stack)。
(2)主線程之外,還存在一個"任務(wù)隊列"(task queue)。只要異步任務(wù)有了運行結(jié)果,就在"任務(wù)隊列"之中放置一個事件。
(3)一旦"執(zhí)行棧"中的所有同步任務(wù)執(zhí)行完畢,系統(tǒng)就會讀取"任務(wù)隊列",看看里面有哪些事件。那些對應(yīng)的異步任務(wù),于是結(jié)束等待狀態(tài),進入執(zhí)行棧,開始執(zhí)行。
(4)主線程不斷重復(fù)上面的第三步。
主線程不斷執(zhí)行任務(wù)獲取任務(wù)、執(zhí)行任務(wù)……的過程叫做事件循環(huán)

簡單的理解
vue在修改數(shù)據(jù)后,視圖不會立刻更新,而是等同一事件循環(huán)中的所有數(shù)據(jù)變化完成以后,再進行視圖更新.

為什么不同步進行DOM更新呢?
因為如果同步進行DOM更新,則每次對響應(yīng)式數(shù)據(jù)進行修改就都會觸發(fā)setter -> 通知watcher -> 觸發(fā)re-render -> 生成new vnode(vdom) -> patch(更新真實DOM)。如果每次修改數(shù)據(jù)都會走一遍這個流程是非常消耗性能的,所以使用異步更新 DOM 的策略,先對數(shù)據(jù)修改進行整合,再使用最終的整合結(jié)果一次性對 DOM 進行更新。

3、獲取更新后的 DOM

<template>
  <div class="test">
    <div>
      <button @click="test" ref="btn">{{ msg1 }}</button>
    </div>
    <div>
      <button @click="test2" ref="btn">{{ msg2 }}</button>
    </div>
  </div>
</template>
<script>
export default {
  data () {
    return {
      msg1: '按鈕1',
      msg2: '按鈕2'
    }
  },
  methods: {
    test () {
      this.msg1 = '信息改變了。。。。'
      console.log('打印結(jié)果:' + this.$refs.btn.innerText) // 打印結(jié)果:按鈕
    },
    test2 () {
      this.msg2 = '使用this.$nextTick后'
      this.$nextTick(function () {
        console.log('打印結(jié)果:' + this.$refs.btn.innerText) // 打印結(jié)果:使用this.$nextTick后
      })
    }
  }
}
</script>

通過使用this.$nextTick,此時的打印結(jié)果就可以獲取到打印結(jié)果:使用this.$nextTick后的信息。

4、小結(jié):this.$nextTick()的使用場景

  • 在Vue生命周期的created()鉤子函數(shù)進行的DOM操作一定要放在Vue.nextTick()的回調(diào)函數(shù)中。原因是在created()鉤子函數(shù)執(zhí)行的時候DOM 其實并未進行任何渲染,而此時進行DOM操作無異于徒勞,所以此處一定要將DOM操作的js代碼放進Vue.nextTick()的回調(diào)函數(shù)中。與之對應(yīng)的就是mounted鉤子函數(shù),因為該鉤子函數(shù)執(zhí)行時所有的DOM掛載和渲染都已完成,此時在該鉤子函數(shù)中進行任何DOM操作都不會有問題 。
  • 在數(shù)據(jù)變化后要執(zhí)行的某個操作,當(dāng)你設(shè)置 this.msg1 = ‘信息改變了。。。。’ ,DOM并不會馬上更新,而是在異步隊列被清除,也就是下一個事件循環(huán)開始時執(zhí)行更新時才會進行必要的DOM更新。如果此時你想要根據(jù)更新的 DOM 狀態(tài)去做某些事情,就會出現(xiàn)問題。。為了在數(shù)據(jù)變化之后等待 Vue 完成更新 DOM ,可以在數(shù)據(jù)變化之后立即使用 Vue.nextTick(callback) 。這樣回調(diào)函數(shù)在 DOM 更新完成后就會調(diào)用

到此這篇關(guān)于Vue中this.$nextTick()的具體使用的文章就介紹到這了,更多相關(guān)Vue this.$nextTick() 內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Vue項目打包問題詳解(生產(chǎn)環(huán)境樣式失效)

    Vue項目打包問題詳解(生產(chǎn)環(huán)境樣式失效)

    在Vue開發(fā)過程中,項目的打包是一個非常重要的步驟,下面這篇文章主要給大家介紹了關(guān)于Vue項目打包問題(生產(chǎn)環(huán)境樣式失效)的相關(guān)資料,文中介紹的非常詳細,需要的朋友可以參考下
    2023-12-12
  • 關(guān)于vue 的slot分發(fā)內(nèi)容 (多個分發(fā))

    關(guān)于vue 的slot分發(fā)內(nèi)容 (多個分發(fā))

    這篇文章主要介紹了關(guān)于vue 的slot分發(fā)內(nèi)容 (多個分發(fā)),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • 使用Vue進行數(shù)據(jù)可視化實踐分享

    使用Vue進行數(shù)據(jù)可視化實踐分享

    在當(dāng)今的數(shù)據(jù)驅(qū)動時代,數(shù)據(jù)可視化變得越來越重要,它能夠幫助我們更直觀地理解數(shù)據(jù),從而做出更好的決策,在這篇博客中,我們將探索如何使用 Vue 和一些常見的圖表庫(如 Chart.js)來制作漂亮的數(shù)據(jù)可視化效果,需要的朋友可以參考下
    2024-10-10
  • 詳解vue組件基礎(chǔ)

    詳解vue組件基礎(chǔ)

    本篇文章給大家總結(jié)了vue組件基礎(chǔ)的相關(guān)知識點以及代碼實例,有需要的朋友可以學(xué)習(xí)參考下。
    2018-05-05
  • 淺談 Vue 項目優(yōu)化的方法

    淺談 Vue 項目優(yōu)化的方法

    這篇文章主要介紹了淺談 Vue 項目優(yōu)化的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-12-12
  • vue2滾動條加載更多數(shù)據(jù)實現(xiàn)代碼

    vue2滾動條加載更多數(shù)據(jù)實現(xiàn)代碼

    本篇文章主要介紹了vue2滾動條加載更多數(shù)據(jù)實現(xiàn)代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-01-01
  • Vue自定義實現(xiàn)一個消息通知組件

    Vue自定義實現(xiàn)一個消息通知組件

    這篇文章主要為大家詳細介紹了如何利用Vue自定義實現(xiàn)一個消息通知組件,文中的示例代碼講解詳細,具有一定的借鑒價值,有需要的小伙伴可以參考下
    2024-03-03
  • Vue3新特性之在Composition API中使用CSS Modules

    Vue3新特性之在Composition API中使用CSS Modules

    這篇文章主要介紹了Vue3新特性之在Composition API中使用CSS Modules,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • vue實現(xiàn)設(shè)置載入動畫和初始化頁面動畫效果

    vue實現(xiàn)設(shè)置載入動畫和初始化頁面動畫效果

    今天小編就為大家分享一篇vue實現(xiàn)設(shè)置載入動畫和初始化頁面動畫效果,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-10-10
  • 淺談Vuex的狀態(tài)管理(全家桶)

    淺談Vuex的狀態(tài)管理(全家桶)

    本篇文章主要介紹了淺談Vuex狀態(tài)管理(全家桶),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-11-11

最新評論