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中就已經完成了

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM