1. 程式人生 > 其它 >VUE—生命週期的基本介紹

VUE—生命週期的基本介紹

Vue生命週期:

  什麼是生命週期:

    Vue 例項從建立到銷燬的過程,就是生命週期。也就是從開始建立、初始化資料、編譯模板、掛載Dom→渲染、更新→渲染、解除安裝等一系列過程,我們稱這是 Vue 的生命週期。

  什麼是鉤子函式:

    因為過程都是分一個階段一個階段的並且都是相連的

  生命週期的四個階段:

    create(初始)、mount(載入)、update(更新)、destroy(銷燬)

  生命週期的八個過程:

    beforeCreate(){}  

      例項初始化之前  資料沒有載入 頁面沒有顯示,debugger; 斷點除錯,往往在這個階段做loading 請求狀態

    create(){}      

      例項初始化後,請求到了資料,事件,屬性等,但是沒有載入,頁面依然沒有顯示,在這個階段,往往傳送 ajax請求,http請求

      create---beforeMount之間 vue會在options中查詢有沒有el選項,有就把它作為模板,沒有就通過vm.$mount()去掛載,created之後有個判斷,先看你有沒有el屬性,在看看有沒有模板屬性,有模板屬性呢,就會把模板上的東西渲染出去,沒有模板屬性呢,就把el上的東西當做模板渲染出去,created-boforeMount的過程就是找模板,而模板都是虛擬的

    beforeMount(){} 

  

      vue會將el對應的模板 加到$el中去,但是還沒有掛載出去,頁面沒有顯示

    mounted(){}     

      頁面加載出來

    beforeUpdate(){}   

      資料更新前,在虛擬dom中使用differ演算法,在記憶體中實現的,mounted之前的過程就不管了。如果想看屬性的變化,

      在這個階段可以使用watch(屬性監聽)這個方法監聽屬性

    update(){}      

      更新完了,在渲染,誰改變了渲染誰,不是整個dom樹重新渲染

    beforeDestroy(){}   

      銷燬之前

      destroy銷燬,例項銷燬需要人為觸發

                銷燬:之前渲染好的保持不變,保留下來,後面再使用這個例項就不起作用了

      Vm.$destroy()   進行銷燬

    destroyed(){} 

      銷燬之後

  簡述一下每個週期具體適合那些場景:

    beforeDestroy:可以在這加個loading事件,在載入例項是觸發

    created:初始化完成時的事件寫在這裡,如在這結束loading事件,非同步請求也適宜在這裡呼叫

    mouted:掛載元素,獲取到DOM節點

    updated:如果對資料統一處理,在這裡寫上相應函式

    beforeDestroy:可以做一個確認停止事件的確認框

    nextTick:更新資料後立即操作dom

  巢狀元件的生命週期的執行順序:

    vm.beforeCreate ——> vm.created ——> vm.beforeMount ——> son.beforeCreate ——> son.created ——> son.beforeMount ——> son.mounted ——> vm.mounted

  更改元件資料  修改子元件的資料

    vm.beforeCreate ——> vm.created ——> vm.beforeMount ——> son.beforeCreate ——> son.created ——> son.beforeMount ——> son.mounted ——> vm.mounted ——> son.beforeUpdate ——> son.updated

    元件更新資料 只會呼叫自己的beforeUpdate 和 updated 不會影響到其他元件的更新鉤子

               如果說父元件獲取的子元件中的標籤中的內容,這個內容會被子元件修改的,父元件獲取的都是修改前的,因為子元件的更新不會在去觸發父元件的mounted

               this.$nextTick()    這個方法是元件中所有的鉤子執行完畢之後才會觸發(包括子元件)。

    過程:

                         vm.beforeCreate ——> vm.created ——> vm.beforeMount ——> son.beforeCreate ——> son.created ——> son.beforeMount ——> son.mounted ——> vm.mounted ——> son.beforeUpdate ——> son.updated ——> this.$nextTick()

  第一次頁面載入會觸發哪幾個鉤子?

    第一次頁面載入時會觸發 beforeCreate, created, beforeMount, mounted 這幾個鉤子

  DOM渲染在 哪個週期中就已經完成了?

    DOM渲染在mounted中就已經完成了