Vue實例的生命周期

Vue實例有一個完整的生命周期,也就是從開始創(chuàng)建、初始化數(shù)據(jù)、編譯模板、掛載Dom、渲染→更新→渲染、卸載等一系列過程,我們稱這是Vue的生命周期。通俗說就是Vue實例從創(chuàng)建到銷毀的過程,就是生命周期。
在Vue的整個生命周期中,它提供了一系列的事件,可以讓我們注冊js方法,可以讓我們達到控制整個過程的目的地。值得注意的是,在這些事件響應方法中的this直接指向的是vue的實例。
首先看看下面官網(wǎng)的一張生命周期的圖,看看整體的流程:


vue的生命周期.png

Vue提供的可以注冊的鉤子都在上圖片的紅色框標注。 它們是:

beforeCreate
在實例初始化之后,數(shù)據(jù)觀測(data observer) 和 event/watcher 事件配置之前被調(diào)用。

created
實例已經(jīng)創(chuàng)建完成之后被調(diào)用。在這一步,實例已完成以下的配置:數(shù)據(jù)觀測(data observer),屬性和方法的運算, watch/event 事件回調(diào)。然而,掛載階段還沒開始,$el 屬性目前不可見。

beforeMount
在掛載開始之前被調(diào)用:相關的 render 函數(shù)首次被調(diào)用。

mounted
el 被新創(chuàng)建的vm.el替換,并掛載到實例上去之后調(diào)用該鉤子。如果 root 實例掛載了一個文檔內(nèi)元素,當 mounted 被調(diào)用時 vm.$el 也在文檔內(nèi)。

beforeUpdate
數(shù)據(jù)更新時調(diào)用,發(fā)生在虛擬 DOM 重新渲染和打補丁之前。 你可以在這個鉤子中進一步地更改狀態(tài),這不會觸發(fā)附加的重渲染過程。

updated
由于數(shù)據(jù)更改導致的虛擬 DOM 重新渲染和打補丁,在這之后會調(diào)用該鉤子。

當這個鉤子被調(diào)用時,組件 DOM 已經(jīng)更新,所以你現(xiàn)在可以執(zhí)行依賴于 DOM 的操作。然而在大多數(shù)情況下,你應該避免在此期間更改狀態(tài),因為這可能會導致更新無限循環(huán)。

該鉤子在服務器端渲染期間不被調(diào)用。

beforeDestroy
實例銷毀之前調(diào)用。在這一步,實例仍然完全可用。

destroyed
Vue 實例銷毀后調(diào)用。調(diào)用后,Vue 實例指示的所有東西都會解綁定,所有的事件監(jiān)聽器會被移除,所有的子實例也會被銷毀。 該鉤子在服務器端渲染期間不被調(diào)用。

var app = new Vue({         
      el: '#app',               
      data: {                   
        number: 1
      },
      beforeCreate: function () {
        console.log('beforeCreate 鉤子執(zhí)行...');
        console.log(this.number)
      },
      cteated: function () {
        console.log('cteated 鉤子執(zhí)行...');
        console.log(this.number)
      },
      beforeMount: function () {
        console.log('beforeMount 鉤子執(zhí)行...');
        console.log(this.number)
      },
      mounted: function () {
        console.log('mounted 鉤子執(zhí)行...');
        console.log(this.number)
      },
      beforeUpdate: function () {
        console.log('beforeUpdate 鉤子執(zhí)行...');
        console.log(this.number)
      },
      updated: function () {
        console.log('updated 鉤子執(zhí)行...');
        console.log(this.number)
      },
      beforeDestroy: function () {
        console.log('beforeDestroy 鉤子執(zhí)行...');
        console.log(this.number)
      },
      destroyed: function () {
        console.log('destroyed 鉤子執(zhí)行...');
        console.log(this.number)
      },
    });
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容