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

深入學(xué)習(xí)Vue nextTick的用法及原理

 更新時(shí)間:2019年10月08日 08:23:14   作者:有夢(mèng)想的咸魚前端  
這篇文章主要介紹了深入學(xué)習(xí)Vue nextTick的用法及原理,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

Vue.nextTick是Vue官方給我們提供的一個(gè)API(方法),作用是在下次DOM更新循環(huán)結(jié)束之后執(zhí)行延遲回調(diào)。在修改數(shù)據(jù)之后立即使用這個(gè)方法,獲取更新后的DOM;

那么我們的理解是:當(dāng)數(shù)據(jù)發(fā)生變化之后,DOM視圖并不會(huì)立即更新,如果我們?cè)诎l(fā)生變化之后立馬去獲取某個(gè)節(jié)點(diǎn)或者某個(gè)節(jié)點(diǎn)的值,很有可能結(jié)果就是undefined;因?yàn)閂ue實(shí)現(xiàn)響應(yīng)式并不是數(shù)據(jù)發(fā)生變化之后DOM立即變化,而是按一定的策略進(jìn)行DOM的更新;

來(lái)看一個(gè)小demo:

App.vue 

<template>
 <div id="app">
    <div ref="message">{{msg}}</div>
    <div v-if="msg1">{{msg1}}</div>
    <button @click="changeMsg">Change the Message</button>
 </div>
</template>

<script>
export default {
 name: 'App',
 data(){
  return {
   msg:"Hello Vue",
   msg1: '',
  }
 },
 methods:{
  changeMsg(){
   this.msg='hello world';
   this.msg1=this.$refs.message.innerHTML;
    console.log("更新DOM之前:"+this.msg1)
  }
 }
}
</script>

<style>
#app {
 font-family: 'Avenir', Helvetica, Arial, sans-serif;
 -webkit-font-smoothing: antialiased;
 -moz-osx-font-smoothing: grayscale;
 text-align: center;
 color: #2c3e50;
 margin-top: 60px;
}
</style>

我們通過(guò)運(yùn)行代碼能夠看到當(dāng)我們不在this.$nextTick方法里面進(jìn)行DOM操作的時(shí)候,this.$refs.message.innerHTML的值存儲(chǔ)的還是之前的初始值;

修改代碼:

App.vue  

<template>
 <div id="app">
    <div ref="message">{{msg}}</div>
    <div v-if="msg1">{{msg1}}</div>
    <button @click="changeMsg">Change the Message</button>
 </div>
</template>

<script>
export default {
 name: 'App', 
 data(){
  return {
   msg:"Hello Vue",
   msg1: '',
  }
 },
 methods:{
  changeMsg(){
   this.msg='hello world';
   // this.msg1=this.$refs.message.innerHTML;
   // console.log("更新DOM之前:"+this.msg1)
    this.$nextTick(()=>{
     this.msg1=this.$refs.message.innerHTML;
     console.log("更新DOM之后:"+this.msg1)
    })
  }
 }
}
</script>

<style>
#app {
 font-family: 'Avenir', Helvetica, Arial, sans-serif;
 -webkit-font-smoothing: antialiased;
 -moz-osx-font-smoothing: grayscale;
 text-align: center;
 color: #2c3e50;
 margin-top: 60px;
}
</style>

修改代碼之后我們可以發(fā)現(xiàn),使用this.$nextTick很容易的就接收到了更新后的值,正如官網(wǎng)解釋:在下次DOM更新循環(huán)結(jié)束之后執(zhí)行延遲回調(diào)。在修改數(shù)據(jù)之后立即使用這個(gè)方法,獲取更新后的DOM;

再來(lái)修改代碼對(duì)比一下:

App.vue

<template>
 <div id="app">
    <div ref="message">{{msg}}</div>
    <div v-if="msg1">{{msg1}}</div>
    <button @click="changeMsg">Change the Message</button>
 </div>
</template>

<script>
export default {
 name: 'App', 
 data(){
  return {
   msg:"Hello Vue",
   msg1: '',
  }
 },
 methods:{
  changeMsg(){
   this.msg='hello world';
   this.msg1=this.$refs.message.innerHTML;
    console.log("更新DOM之前:"+this.msg1)
    this.$nextTick(()=>{
     this.msg1=this.$refs.message.innerHTML;
     console.log("更新DOM之后:"+this.msg1)
    })
  }
 }
}
</script>

<style>
#app {
 font-family: 'Avenir', Helvetica, Arial, sans-serif;
 -webkit-font-smoothing: antialiased;
 -moz-osx-font-smoothing: grayscale;
 text-align: center;
 color: #2c3e50;
 margin-top: 60px;
}
</style>

經(jīng)過(guò)修改代碼,我們現(xiàn)在可以很容易看出來(lái)this.$nextTick(callback)的作用,callback是回調(diào)函數(shù)也就是我們要進(jìn)行操作DOM的事情;

應(yīng)用場(chǎng)景:

在vue的生命周期鉤子函數(shù)created()中進(jìn)行DOM操作的時(shí)候一定要把DOM操作放入到this.$nextTick()中;

因?yàn)樵赾reated鉤子函數(shù)觸發(fā)的時(shí)候,DOM是沒(méi)有進(jìn)行渲染的;DOM沒(méi)有進(jìn)行渲染,然后進(jìn)行DOM操作無(wú)疑是徒勞的;

所以我們?cè)赾reated中進(jìn)行DOM操作的時(shí)候,一定要將DOM操作放入到this.$nextTick()中;

與之相反的是mounted,因?yàn)楫?dāng)觸發(fā)mounted的時(shí)候,DOM的掛載和渲染都已經(jīng)完成了,所以在mounted中進(jìn)行DOM操作是不會(huì)有任何問(wèn)題的;

因?yàn)镈OM更新是異步的,像v-if指令判斷增刪DOM元素,我們?cè)诜椒ㄖ薪o變量賦值的時(shí)候,如果不使用this.$nextTick(),我們很有可能拿到的還是初始值,如果想拿到更新后的值,需要使用this.$nextTick()方法

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 詳解vue3?響應(yīng)式的實(shí)現(xiàn)原理

    詳解vue3?響應(yīng)式的實(shí)現(xiàn)原理

    Vue.js?3.0?為了解決?Object.defineProperty?的這些缺陷,使用?Proxy?API?重寫了響應(yīng)式部分,并獨(dú)立維護(hù)和發(fā)布整個(gè)?reactivity?庫(kù),這篇文章主要介紹了vue3?響應(yīng)式的實(shí)現(xiàn)原理,需要的朋友可以參考下
    2022-06-06
  • Vue3 style CSS 變量注入的實(shí)現(xiàn)

    Vue3 style CSS 變量注入的實(shí)現(xiàn)

    本文主要介紹了Vue3 style CSS 變量注入的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-07-07
  • Vue數(shù)據(jù)變化后頁(yè)面更新詳細(xì)介紹

    Vue數(shù)據(jù)變化后頁(yè)面更新詳細(xì)介紹

    這篇文章主要介紹了Vue在數(shù)據(jù)發(fā)生變化后是如何更新頁(yè)面的,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧
    2022-10-10
  • vue3監(jiān)聽resize窗口事件(離開頁(yè)面要銷毀窗口事件)

    vue3監(jiān)聽resize窗口事件(離開頁(yè)面要銷毀窗口事件)

    這篇文章主要給大家介紹了關(guān)于vue3監(jiān)聽resize窗口事件(離開頁(yè)面要銷毀窗口事件)的相關(guān)資料,vue是單頁(yè)面應(yīng)用,路由切換后,定時(shí)器并不會(huì)自動(dòng)關(guān)閉,需要手動(dòng)清除,當(dāng)頁(yè)面被銷毀時(shí),清除定時(shí)器即可,需要的朋友可以參考下
    2023-11-11
  • Vben Admin 多標(biāo)簽頁(yè)狀態(tài)管理源碼學(xué)習(xí)

    Vben Admin 多標(biāo)簽頁(yè)狀態(tài)管理源碼學(xué)習(xí)

    這篇文章主要為大家介紹了Vben Admin 多標(biāo)簽頁(yè)狀態(tài)管理源碼學(xué)習(xí),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09
  • Vue.js2.0中的變化小結(jié)

    Vue.js2.0中的變化小結(jié)

    最近小編在學(xué)習(xí)vue.js ,發(fā)現(xiàn)里面有好多好玩的東東,今天小編給大家分享Vue.js2.0中的變化,小編會(huì)在日后給大家持續(xù)更新的,感興趣的朋友參考下吧
    2017-10-10
  • Vue組件模板形式實(shí)現(xiàn)對(duì)象數(shù)組數(shù)據(jù)循環(huán)為樹形結(jié)構(gòu)(實(shí)例代碼)

    Vue組件模板形式實(shí)現(xiàn)對(duì)象數(shù)組數(shù)據(jù)循環(huán)為樹形結(jié)構(gòu)(實(shí)例代碼)

    這篇文章主要介紹了Vue組件模板形式實(shí)現(xiàn)對(duì)象數(shù)組數(shù)據(jù)循環(huán)為樹形結(jié)構(gòu),本文用vue實(shí)現(xiàn)方式,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2017-07-07
  • vue-router的兩種模式的區(qū)別

    vue-router的兩種模式的區(qū)別

    這篇文章主要介紹了vue-router的兩種模式的區(qū)別,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-05-05
  • Vue如何使用cdn加載資源加快打包速度

    Vue如何使用cdn加載資源加快打包速度

    外部的庫(kù)文件,可以使用CDN資源,或者別的服務(wù)器資源等,下面這篇文章主要給大家介紹了關(guān)于Vue如何使用cdn加載資源加快打包速度的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-05-05
  • Vue3使用icon的兩種方式實(shí)例

    Vue3使用icon的兩種方式實(shí)例

    vue開發(fā)網(wǎng)站的時(shí)候,往往圖標(biāo)是起著很重要的作用,下面這篇文章主要給大家介紹了關(guān)于Vue3使用icon的兩種方式,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2021-11-11

最新評(píng)論