最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

1、官網(wǎng)說(shuō)法

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

核心點(diǎn)有2個(gè):DOM 更新獲取更新后的 DOM。

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

2、DOM 更新

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

通過(guò)代碼我們驗(yàn)證下:不是數(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>

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

異步執(zhí)行DOM更新

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

在這里插入圖片描述

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

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

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

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>

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

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

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

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

相關(guān)文章

  • vue項(xiàng)目中如何添加枚舉

    vue項(xiàng)目中如何添加枚舉

    這篇文章主要介紹了vue項(xiàng)目中如何添加枚舉,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-09-09
  • 使用table做成樹(shù)形結(jié)構(gòu)的table

    使用table做成樹(shù)形結(jié)構(gòu)的table

    這篇文章主要介紹了使用table做成樹(shù)形結(jié)構(gòu)的table問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • vue.js實(shí)現(xiàn)格式化時(shí)間并每秒更新顯示功能示例

    vue.js實(shí)現(xiàn)格式化時(shí)間并每秒更新顯示功能示例

    這篇文章主要介紹了vue.js實(shí)現(xiàn)格式化時(shí)間并每秒更新顯示功能,結(jié)合實(shí)例形式分析了vue.js時(shí)間格式化顯示與基于定時(shí)器進(jìn)行實(shí)時(shí)更新的相關(guān)操作技巧,需要的朋友可以參考下
    2018-07-07
  • Vue 中v-model的完整用法及v-model的實(shí)現(xiàn)原理解析

    Vue 中v-model的完整用法及v-model的實(shí)現(xiàn)原理解析

    這篇文章詳細(xì)介紹了Vue.js中的v-model指令的使用,包括基本用法、原理、結(jié)合不同類(lèi)型的表單元素(如radio、checkbox、select)以及使用修飾符(如lazy、number、trim)等,感興趣的朋友一起看看吧
    2025-02-02
  • vue中實(shí)現(xiàn)div可編輯并插入指定元素與樣式

    vue中實(shí)現(xiàn)div可編輯并插入指定元素與樣式

    這篇文章主要給大家介紹了關(guān)于vue中實(shí)現(xiàn)div可編輯并插入指定元素與樣式的相關(guān)資料,文中通過(guò)代碼以及圖文將實(shí)現(xiàn)的方法介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用vue具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-09-09
  • vue引入組件的幾種方法代碼示例

    vue引入組件的幾種方法代碼示例

    vue的一個(gè)強(qiáng)大功能就是組件化開(kāi)發(fā),下面這篇文章主要給大家介紹了關(guān)于vue引入組件的幾種方法,文中給出了詳細(xì)的代碼及圖文介紹,需要的朋友可以參考下
    2024-04-04
  • Vue slot插槽的使用詳情

    Vue slot插槽的使用詳情

    這篇文章主要介紹了Vue slot插槽的使用,在生活中很多地方都有插槽,電腦usb的插槽,插板當(dāng)中的電源插槽,插槽的目的是為了讓我們?cè)瓉?lái)的設(shè)備具備更多的擴(kuò)展性比如電腦的USB我們可以插入U(xiǎn)盤(pán),手機(jī),鼠標(biāo),鍵盤(pán)等等,下面文章就來(lái)介紹Vue slot插槽是如何使用的
    2021-10-10
  • 前端報(bào)錯(cuò)npm ERR! cb() never called!問(wèn)題解決辦法

    前端報(bào)錯(cuò)npm ERR! cb() never called!問(wèn)題解決辦法

    最近接手了一個(gè)前臺(tái)項(xiàng)目,執(zhí)行npm install的時(shí)候一直報(bào)錯(cuò),所以這里就給大家總結(jié)下,這篇文章主要給給大家介紹了關(guān)于前端報(bào)錯(cuò)npm?ERR! cb() never called!問(wèn)題的解決辦法,需要的朋友可以參考下
    2024-05-05
  • 在vue項(xiàng)目中promise解決回調(diào)地獄和并發(fā)請(qǐng)求的問(wèn)題

    在vue項(xiàng)目中promise解決回調(diào)地獄和并發(fā)請(qǐng)求的問(wèn)題

    這篇文章主要介紹了在vue項(xiàng)目中promise解決回調(diào)地獄和并發(fā)請(qǐng)求的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-11-11
  • vue-router 路由傳參問(wèn)題(路由傳參方式)

    vue-router 路由傳參問(wèn)題(路由傳參方式)

    路由傳參主要有兩種方式一種是路徑傳參一種是參數(shù)傳遞,本文結(jié)合示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2023-11-11

最新評(píng)論

思茅市| 鲁甸县| 沙湾县| 长春市| 宁国市| 九龙坡区| 武川县| 来安县| 临海市| 呼玛县| 正蓝旗| 汉沽区| 饶阳县| 雅江县| 崇义县| 桂平市| 花莲市| 洛浦县| 云霄县| 布尔津县| 扶沟县| 云阳县| 武山县| 望谟县| 承德市| 卢龙县| 佳木斯市| 英德市| 丰镇市| 土默特右旗| 织金县| 桃园县| 玉环县| 剑川县| 康乐县| 吴忠市| 绥棱县| 馆陶县| 陕西省| 鹿泉市| 工布江达县|