Vue生命周期實例分析總結

1. 概述

每個 Vue 實例在被創建之前都要經過一系列的初始化過程。例如需要設置數據監聽、編譯模板、掛載實例到 DOM、在數據變化時更新 DOM 等。同時在這個過程中也會運行一些叫做生命周期鉤子的函數,給予用戶機會在一些特定的場景下添加他們自己的代碼。

簡單來說,生命周期鉤子函數就是一堆回調函數,在我們創建實例時,這些回調函數按順序執行。

2. 頁面鉤子函數

名稱 作用
beforeCreate 在實例初始化之後,數據觀測和事件配置之前被調用。此時 data 和 methods 以及頁面的DOM結構都沒有初始化,什麼都做不瞭,執行1次
created 在實例創建完成後被立即調用,此時data 和 methods 已經可以使用,但是頁面還沒有渲染出來,執行1次,用this對象
beforeMount 在掛載開始之前被調用,此時頁面上還看不到真實數據,隻是一個模板頁面而已,執行1次
mounted el被新創建的vm.$el替換,並掛載到實例上去之後調用該鉤子。 數據已經真實渲染到頁面上 在這個鉤子函數裡面,可以進行數據請求等,執行1次
beforeUpdate 數據更新時調用,頁面上數據還是舊的 n次
updated 由於數據更新完畢,頁面上數據已經替換成最新的 n次
beforeDestroy 實例銷毀之前調用,執行1次
destroyed 實例銷毀後調用,執行1次
activated keep-alive 組件激活時調用
deactivated keep-alive 組件停用時調用
errorCaptured 當捕獲一個來自子孫組件的錯誤時被調用

3. 生命周期函數

下面我們用代碼實現以下生命周期函數的執行順序:

<div id="app">
    <input type="text" v-model="username">
</div>
<script>
    const vm = new Vue({
        el: '#app',
        data: {
            username: ''
        },
        // 初始化階段生命周期  -- 它隻都隻執行1次
        beforeCreate() {
            console.log('beforeCreate');
        },
        created() {
            console.log('created');
        },
        beforeMount() {
            console.log('beforeMount');
        },
        mounted() {
            console.log('mounted');
            setTimeout(() => {
                // 銷毀
                this.$destroy()
            }, 2000);
            this.timer = setInterval(() => {
                console.log(111);
            }, 1000);
        },
        // 更新階段生命周期,它們會執行N次
        beforeUpdate() {
            console.log('beforeUpdate');
        },
        updated() {
            console.log('updated');
        },
        // 銷毀階段  隻執行1次
        beforeDestroy() {
            clearInterval(this.timer)
            console.log('beforeDestroy');
        },
        destroyed() {
            console.log('destroyed');
        }
    })
</script>

到此這篇關於Vue生命周期實例分析總結的文章就介紹到這瞭,更多相關Vue生命周期內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: