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

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

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

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

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

vue.nextTick()的使用場景

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

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

在created()鉤子函數(shù)執(zhí)行的時候DOM 其實并未進(jìn)行任何渲染,而此時進(jìn)行DOM操作無異于徒勞,所以此處一定要將DOM操作的js代碼放進(jìn)Vue.nextTick()的回調(diào)函數(shù)中。

與之對應(yīng)的就是mounted()鉤子函數(shù),因為該鉤子函數(shù)執(zhí)行時所有的DOM掛載和渲染都已完成,此時在該鉤子函數(shù)中進(jìn)行任何DOM操作都不會有問題 。

<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)項目中你想在改變DOM元素的數(shù)據(jù)后基于新的dom做點什么,對新DOM一系列的js操作都需要放進(jìn)Vue.nextTick()的回調(diào)函數(shù)中;

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

<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點擊后 頁面展示 由上圖更改為

如果不放在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點擊后報錯 因為DOM還未渲染

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點擊后頁面展示為

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:因為要入微任務(wù)隊列,即使是0最快也要4ms,要等待出隊。

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

總結(jié)

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

相關(guān)文章

  • 詳解vue移動端日期選擇組件

    詳解vue移動端日期選擇組件

    小編給大家整理了關(guān)于vue移動端日期選擇組件的知識點總結(jié),希望能夠給讀者帶來幫助,一起學(xué)習(xí)參考下。
    2018-02-02
  • vue實現(xiàn)經(jīng)典選項卡功能

    vue實現(xiàn)經(jīng)典選項卡功能

    這篇文章主要為大家詳細(xì)介紹了vue實現(xiàn)經(jīng)典選項卡功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • vue3+pinia用戶信息持久緩存token的問題解決

    vue3+pinia用戶信息持久緩存token的問題解決

    本文主要介紹了vue3+pinia用戶信息持久緩存token的問題解決,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • Vue Render函數(shù)創(chuàng)建DOM節(jié)點代碼實例

    Vue Render函數(shù)創(chuàng)建DOM節(jié)點代碼實例

    這篇文章主要介紹了Vue Render函數(shù)創(chuàng)建DOM節(jié)點代碼實例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-07-07
  • vue.js中window.onresize的超詳細(xì)使用方法

    vue.js中window.onresize的超詳細(xì)使用方法

    這篇文章主要給大家介紹了關(guān)于vue.js中window.onresize的超詳細(xì)使用方法,window.onresize 是直接給window的onresize屬性綁定事件,只能有一個,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-12-12
  • 如何換個角度使用VUE過濾器詳解

    如何換個角度使用VUE過濾器詳解

    這篇文章主要給大家介紹了如何換個角度使用VUE過濾器的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用VUE具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • 一文詳解Vue中nextTick的原理與作用

    一文詳解Vue中nextTick的原理與作用

    Vue的nextTick方法是用于在DOM更新后執(zhí)行回調(diào)的工具函數(shù),它的作用是在當(dāng)前JavaScript執(zhí)行環(huán)境中延遲執(zhí)行回調(diào),以確保在下次DOM更新循環(huán)之前,可以訪問到更新后的DOM,本文就給大家介紹一下Vue nextTick原理與作用,需要的朋友可以參考下
    2023-08-08
  • Ant Design Vue pro 動態(tài)路由的實現(xiàn)和打包方式

    Ant Design Vue pro 動態(tài)路由的實現(xiàn)和打包方式

    這篇文章主要介紹了Ant Design Vue pro 動態(tài)路由的實現(xiàn)和打包方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • JS數(shù)組Array常用方法匯總+實例

    JS數(shù)組Array常用方法匯總+實例

    這篇文章主要介紹了JS數(shù)組Array常用方法匯總和實例,JavaScript創(chuàng)建數(shù)組的方式,找數(shù)組元素,數(shù)組去重,實現(xiàn)數(shù)組排序需要的朋友可以參考下
    2022-05-05
  • Vue3中的script?setup語法糖的使用及說明

    Vue3中的script?setup語法糖的使用及說明

    在這篇博客中,我們將探討?script?setup?的含義、好處以及示例代碼,幫助你更好地理解并在項目中合理運用這一特性,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-03-03

最新評論