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

vue.nextTick()與setTimeout的區(qū)別及說明

 更新時(shí)間:2024年03月07日 08:43:11   作者:wei_dan1129  
這篇文章主要介紹了vue.nextTick()與setTimeout的區(qū)別及說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

nextTick相當(dāng)于一個(gè)異步函數(shù):

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

vue.nextTick()的使用場(chǎng)景

Vue中DOM渲染是在mounted()鉤子函數(shù)中,created()鉤子函數(shù)中DOM還未渲染,無法直接操作DOM 

1、在Vue生命周期的created()鉤子函數(shù)進(jìn)行的DOM操作一定要放在Vue.nextTick()的回調(diào)函數(shù)中

在created()鉤子函數(shù)執(zhí)行的時(shí)候DOM 其實(shí)并未進(jìn)行任何渲染,而此時(shí)進(jìn)行DOM操作無異于徒勞,所以此處一定要將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ì)有問題 。

<div id="app">
      <ul>
        <li v-for="(item,index) in arr" :key="index">{{item}}</li>
      </ul>
    </div>
<script>
let app = new Vue({
	data: {
	    arr: [1,2,3],
	  },
	  created() {
	  console.log('created',document.querySelectorAll('li').length)
	    this.$nextTick(()=>{
	    console.log('nextTick',document.querySelectorAll('li').length)
	    document.querySelectorAll('li')[0].innerHTML="created中更改了按鈕內(nèi)容"; 
	      })
	        
	  }
  });
  </script>

2、當(dāng)項(xiàng)目中你想在改變DOM元素的數(shù)據(jù)后基于新的dom做點(diǎn)什么,對(duì)新DOM一系列的js操作都需要放進(jìn)Vue.nextTick()的回調(diào)函數(shù)中;

通俗的理解是:更改數(shù)據(jù)后當(dāng)你想立即使用js操作新的視圖的時(shí)候需要使用它

<div id="app">
      <ul>
        <li v-for="(item,index) in arr" :key="index" @click="getAdd">{{item}}</li>
      </ul>
    </div>
<script>
let app = new Vue({
	data: {
	    arr: [1,2,3],
	  },
	  methods: {
	        getAdd(){
	            this.arr = [4,5,6,7];
	            this.$nextTick(()=>{
	                document.querySelectorAll('li')[3].innerHTML="33333333333333";
	                console.log('nextTick',document.querySelectorAll('li').length)
	            })
	
	        },
	    },
	    created() {
	      console.log('created',document.querySelectorAll('li').length)
	
	    }
    });
    </script>

li點(diǎn)擊后 頁面展示 由上圖更改為

如果不放在nextTick中

<div id="app">
      <ul>
        <li v-for="(item,index) in arr" :key="index" @click="getAdd">{{item}}</li>
      </ul>
    </div>
<script>
let app = new Vue({
	data: {
	    arr: [1,2,3],
	  },
	  methods: {
	        getAdd(){
	            this.arr = [4,5,6,7];
	            document.querySelectorAll('li')[3].innerHTML="44444444444444";
	            console.log('methods',document.querySelectorAll('li').length)
	        },
	    },
	    created() {
	      console.log('created',document.querySelectorAll('li').length)
	
	    }
    });
    </script>

li點(diǎn)擊后報(bào)錯(cuò) 因?yàn)镈OM還未渲染

setTimeout

<div id="app">
      <ul>
        <li v-for="(item,index) in arr" :key="index" @click="getAdd">{{item}}</li>
      </ul>
    </div>
<script>
let app = new Vue({
	data: {
	    arr: [1,2,3],
	  },
	  methods: {
	        getAdd(){
	            this.arr = [4,5,6,7];
	            setTimeout(() => {
                document.querySelectorAll('li')[3].innerHTML="44444444444444";
                console.log('methods', document.querySelectorAll('li').length);
            });
	
	        },
	    },
	    created() {
	      console.log('created',document.querySelectorAll('li').length)
	
	    }
    });
    </script>

li點(diǎn)擊后頁面展示為

nextTick與setTimeout都是異步函數(shù) 不同的是nextTick比setTimeout優(yōu)先執(zhí)行

原因:

  • macro-task(宏任務(wù)):包括整體代碼script,setTimeout,setInterval
  • micro-task(微任務(wù)):Promise,process.nextTick
  • process.nextTick:process.nextTick(callback)類似node.js版的"setTimeout",在事件循環(huán)的下一次循環(huán)中調(diào)用 callback 回調(diào)函數(shù)。
  • javascript是單線程
  • setTimeout:因?yàn)橐胛⑷蝿?wù)隊(duì)列,即使是0最快也要4ms,要等待出隊(duì)。

宏任務(wù)的執(zhí)行時(shí)間大于微任務(wù)的執(zhí)行時(shí)間

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • vscode使用Eslint+Prettier格式化代碼的詳細(xì)操作

    vscode使用Eslint+Prettier格式化代碼的詳細(xì)操作

    這篇文章主要介紹了vscode使用Eslint+Prettier格式化代碼,本文通過圖文示例代碼相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-08-08
  • vue better scroll 無法滾動(dòng)的解決方法

    vue better scroll 無法滾動(dòng)的解決方法

    better scroll可以實(shí)現(xiàn)輪播圖和頁面滾動(dòng),是移動(dòng)端滾動(dòng)插件,這篇文章主要介紹了vue better scroll 無法滾動(dòng)的解決方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-06-06
  • 加載 vue 遠(yuǎn)程代碼的組件實(shí)例詳解

    加載 vue 遠(yuǎn)程代碼的組件實(shí)例詳解

    vue-cli 作為 Vue 官方推薦的項(xiàng)目構(gòu)建腳手架,它提供了開發(fā)過程中常用的,熱重載,構(gòu)建,調(diào)試,單元測(cè)試,代碼檢測(cè)等功能。我們本次的異步遠(yuǎn)端組件將基于 vue-cli 開發(fā)
    2017-11-11
  • vue2和el-input無法修改和寫入并且不報(bào)錯(cuò)的解決方案

    vue2和el-input無法修改和寫入并且不報(bào)錯(cuò)的解決方案

    這篇文章主要介紹了vue2和el-input無法修改和寫入并且不報(bào)錯(cuò)的解決方案,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2024-07-07
  • 利用Vue實(shí)現(xiàn)數(shù)字翻滾動(dòng)畫效果展示

    利用Vue實(shí)現(xiàn)數(shù)字翻滾動(dòng)畫效果展示

    這篇文章主要介紹了利用Vue實(shí)現(xiàn)數(shù)字翻滾動(dòng)畫效果,通過Vue的響應(yīng)式數(shù)據(jù)更新結(jié)合CSS3的動(dòng)畫效果,我們可以實(shí)現(xiàn)非常酷炫的數(shù)字翻滾效果,給數(shù)據(jù)可視化帶來更多動(dòng)感和吸引力,需要的朋友參考下吧
    2024-04-04
  • Vue3將虛擬節(jié)點(diǎn)渲染到網(wǎng)頁初次渲染詳解

    Vue3將虛擬節(jié)點(diǎn)渲染到網(wǎng)頁初次渲染詳解

    這篇文章主要為大家介紹了Vue3將虛擬節(jié)點(diǎn)渲染到網(wǎng)頁初次渲染詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-03-03
  • Vue?刪除和增加自定義組件實(shí)戰(zhàn)教程

    Vue?刪除和增加自定義組件實(shí)戰(zhàn)教程

    Vue.js是一種流行的JavaScript框架,用于構(gòu)建交互式的Web應(yīng)用程序,在Vue.js中,我們可以通過動(dòng)態(tài)地增加和刪除組件來實(shí)現(xiàn)動(dòng)態(tài)頁面的構(gòu)建和更新,本文介紹Vue?刪除和增加自定義組件實(shí)戰(zhàn)教程,感興趣的朋友一起看看吧
    2024-08-08
  • Vue2+ElementUI表單、Form組件的封裝過程

    Vue2+ElementUI表單、Form組件的封裝過程

    在 Vue2 項(xiàng)目中,ElementUI 的 el-form 組件是常用的表單組件,它提供了豐富的功能和樣式,可以滿足各種需求,本文給大家介紹Vue2+ElementUI表單、Form組件的封裝過程,感興趣的朋友跟隨小編一起看看吧
    2024-03-03
  • Vue常用指令V-model用法

    Vue常用指令V-model用法

    本篇文章主要介紹了Vue常用指令_V-model用法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-03-03
  • vue2.0開發(fā)入門筆記之.vue文件的生成和使用

    vue2.0開發(fā)入門筆記之.vue文件的生成和使用

    本篇文章主要介紹了vue2.0開發(fā)入門筆記之.vue文件的生成和使用 ,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2017-09-09

最新評(píng)論

蓝山县| 铁岭市| 霍山县| 合山市| 隆德县| 加查县| 加查县| 辽宁省| 西畴县| 牡丹江市| 崇州市| 洪泽县| 会宁县| 易门县| 新昌县| 社会| 江西省| 弥渡县| 将乐县| 延川县| 鲜城| 绍兴市| 正蓝旗| 新余市| 绥棱县| 信宜市| 万山特区| 安平县| 永修县| 乳山市| 江都市| 绥芬河市| 玉门市| 德江县| 会理县| 抚远县| 准格尔旗| 天门市| 霍山县| 达州市| 阜阳市|