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

nextTick能否獲取到最新dom原理解析

 更新時(shí)間:2022年11月17日 14:21:31   作者:遠(yuǎn)山無(wú)期  
這篇文章主要為大家介紹了nextTick能否獲取到最新dom原理解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

前言

眾所周知,vuedom更新操作時(shí)異步的,為了獲取更新后的dom官方提供了相應(yīng)的apinextTick,文檔中對(duì)該api的描述為:將回調(diào)延遲到下次 DOM 更新循環(huán)之后執(zhí)行 , 所謂的下一次,到底是哪一次呢?dom更新是異步任務(wù),nextTick的回調(diào)也是異步任務(wù),nextTick的回調(diào)中一定就能獲取到最新的dom么?

nextTick的實(shí)現(xiàn)原理

vue2x中

出于兼容性考慮,依次判斷瀏覽器是否支持,選擇使用對(duì)應(yīng)api

優(yōu)先選擇微任務(wù),如果微任務(wù)都不支持,則選擇宏任務(wù)

vue3中:

拋棄了兼容性,直接使用Promise,來(lái)實(shí)現(xiàn)nextTick

結(jié)論

nextTick的源碼可以看出,nextTick本質(zhì)就是創(chuàng)建了一個(gè)微任務(wù)(不考慮setTimeout),將其回調(diào)推入微任務(wù)隊(duì)列。vue中一個(gè)事件循環(huán)中的所有dom更新操作也是一個(gè)微任務(wù),兩者屬于同一優(yōu)先級(jí),執(zhí)行先后只于入隊(duì)的先后有關(guān),換句話說(shuō),如果你先寫了nextTick,再寫賦值語(yǔ)句(在此之前沒(méi)有觸發(fā)dom更新的操作),那在nextTick中獲取的可就不是更新后的dom

示例說(shuō)明

  • 例如下面的代碼:
<template>
  <div class="demo">
    <p class="name">{{ name }}</p>
    <button @click="modify">修改</button>
  </div>
</template>
<script lang="ts" setup>
const name = ref("111");
const modify = () => {
  name.value = "222"; // 關(guān)鍵的賦值語(yǔ)句,如果注釋掉,結(jié)果就大不一樣了
  nextTick(() => {
    const text = document.querySelector<HTMLElement>(".name").innerText;
    console.log(text);
  });
  name.value = "333";
};
</script>

如上代碼,如果注釋掉name.value = "2222",雖然nextTick語(yǔ)句下面也有賦值操作:name.value = "3333";,但由于nextTick先進(jìn)入微任務(wù)隊(duì)列,所以回調(diào)先于dom更新執(zhí)行,所以是獲取的dom仍舊是舊的更新前的dom

  • 圖解

以上就是nextTick能否獲取到最新dom原理解析的詳細(xì)內(nèi)容,更多關(guān)于nextTick獲取最新dom的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評(píng)論

吕梁市| 临武县| 新郑市| 大洼县| 长汀县| 左贡县| 修文县| 泸溪县| 珲春市| 昌平区| 隆德县| 辰溪县| 多伦县| 萨迦县| 广水市| 科技| 永年县| 鹤庆县| 聊城市| 名山县| 吴忠市| 合作市| 闽清县| 柳林县| 手机| 新晃| 教育| 榕江县| 泽库县| 辽中县| 依安县| 哈巴河县| 河源市| 晋中市| 仁怀市| 龙南县| 诏安县| 四子王旗| 清涧县| 渭南市| 峡江县|