vue實例的生命周期

一、vue實例的生命周期

vue實例的生命周期指的是:從Vue實例創(chuàng)建,運行,到銷毀期間,會伴隨著各種各樣的事件,這些事件統(tǒng)稱為生命周期。

生命周期事件,也稱生命周期函數(shù),也稱生命周期鉤子。

二、生命周期函數(shù)三個階段

1、實例化期和加載期

創(chuàng)建期間的生命周期函數(shù)beforeCreatecreated,beforeMountmounted

一、vue實例的生命周期

vue實例的生命周期指的是:從Vue實例創(chuàng)建,運行,到銷毀期間,會伴隨著各種各樣的事件,這些事件統(tǒng)稱為生命周期。

生命周期事件,也稱生命周期函數(shù),也稱生命周期鉤子。

二、生命周期函數(shù)三個階段

1、實例化期和加載期

創(chuàng)建期間的生命周期函數(shù)beforeCreatecreatedbeforeMountmounted。

6.png

2、更新期

運行期間的生命周期函數(shù)beforeUpdateupdated

7.png

3、卸載期

銷毀期間的生命周期函數(shù)beforeDestroydestroyed

[圖片上傳失敗...(image-615cc4-1630840626148)]

三、生命周期函數(shù)詳解

創(chuàng)建期間:

  • beforeCreate:表示實例完全被創(chuàng)建出來之前,會執(zhí)行beforeCreate函數(shù),這時data 和 methods 中的 數(shù)據(jù)都還沒有沒初始化,如果調用data和methods的數(shù)據(jù)的話,會報錯。
  • created:實例已經(jīng)在內存中創(chuàng)建OK,此時 data 和 methods 已經(jīng)創(chuàng)建OK,此時還沒有開始 編譯模板。
  • beforeMount:此時已經(jīng)完成了模板的編譯,但是還沒有從內存掛載到頁面中。

注意:在 beforeMount 執(zhí)行的時候,頁面中的元素,還沒有被真正替換過來,只是之前寫的一些模板(比如插值表達式)還只是字符串的形式。

  • mounted: 此時,已經(jīng)將編譯好的模板,掛載到了頁面指定的容器中顯示。

運行期間:

  • beforeUpdate:data數(shù)據(jù)更新之后,但是還未渲染到頁面時執(zhí)行的函數(shù)。這時data數(shù)據(jù)已經(jīng)更新,但是頁面的數(shù)據(jù)還是舊的。
  • updated:updated 事件執(zhí)行的時候,頁面和 data 數(shù)據(jù)已經(jīng)保持同步了,都是最新的。

銷毀期間:

  • beforeDestroy:實例銷毀之前調用。在這一步,實例上的data,methods等仍然完全可用。
  • destroyed:Vue 實例銷毀后調用。調用后,Vue 實例指示的所有東西都會解綁定,所有的事件監(jiān)聽器會被移除,所有的子實例也會被銷毀。

示例代碼:

export let User = {
    data(){
        return {
            username: "zhuiszhu",
            count : 0
        }
    },
    template : `
        <div>
            <h3 id="test">{{username}}</h3>
            <p>用戶中心頁頁面內容</p>
            <p>{{count}}</p>
            <button @click="add">+</button>
        </div>
    `,
    methods : {
        add(){
            this.count ++
        }
    },
    // 聲明周期函數(shù)
    beforeCreate(){
        console.log(this.username)
    },
    created(){
        console.log(this.username)
    },
    beforeMount(){
        let dom = document.getElementById("test")
        // console.log(dom)
    },
    mounted(){
        let dom = document.getElementById("test")
        // console.log(dom)
    },
    beforeUpdate(){
        // console.log("組件即將發(fā)生更新")
    },
    updated(){
        // console.log("組件已經(jīng)發(fā)生更新")
    },
    beforeDestroy(){
        // console.log("組件即將被卸載")
    },
    destroyed(){
        // console.log("組件已經(jīng)被卸載")
    }
}

整個生命周期的圖示為:

lifecycle.png

2、更新期

運行期間的生命周期函數(shù)beforeUpdateupdated

7.png

3、卸載期

銷毀期間的生命周期函數(shù)beforeDestroydestroyed

8.png

三、生命周期函數(shù)詳解

創(chuàng)建期間:

  • beforeCreate:表示實例完全被創(chuàng)建出來之前,會執(zhí)行beforeCreate函數(shù),這時data 和 methods 中的 數(shù)據(jù)都還沒有沒初始化,如果調用data和methods的數(shù)據(jù)的話,會報錯。
  • created:實例已經(jīng)在內存中創(chuàng)建OK,此時 data 和 methods 已經(jīng)創(chuàng)建OK,此時還沒有開始 編譯模板。
  • beforeMount:此時已經(jīng)完成了模板的編譯,但是還沒有從內存掛載到頁面中。

注意:在 beforeMount 執(zhí)行的時候,頁面中的元素,還沒有被真正替換過來,只是之前寫的一些模板(比如插值表達式)還只是字符串的形式。

  • mounted: 此時,已經(jīng)將編譯好的模板,掛載到了頁面指定的容器中顯示。

運行期間:

  • beforeUpdate:data數(shù)據(jù)更新之后,但是還未渲染到頁面時執(zhí)行的函數(shù)。這時data數(shù)據(jù)已經(jīng)更新,但是頁面的數(shù)據(jù)還是舊的。
  • updated:updated 事件執(zhí)行的時候,頁面和 data 數(shù)據(jù)已經(jīng)保持同步了,都是最新的。

銷毀期間:

  • beforeDestroy:實例銷毀之前調用。在這一步,實例上的data,methods等仍然完全可用。
  • destroyed:Vue 實例銷毀后調用。調用后,Vue 實例指示的所有東西都會解綁定,所有的事件監(jiān)聽器會被移除,所有的子實例也會被銷毀。

示例代碼:

export let User = {
    data(){
        return {
            username: "zhuiszhu",
            count : 0
        }
    },
    template : `
        <div>
            <h3 id="test">{{username}}</h3>
            <p>用戶中心頁頁面內容</p>
            <p>{{count}}</p>
            <button @click="add">+</button>
        </div>
    `,
    methods : {
        add(){
            this.count ++
        }
    },
    // 聲明周期函數(shù)
    beforeCreate(){
        console.log(this.username)
    },
    created(){
        console.log(this.username)
    },
    beforeMount(){
        let dom = document.getElementById("test")
        // console.log(dom)
    },
    mounted(){
        let dom = document.getElementById("test")
        // console.log(dom)
    },
    beforeUpdate(){
        // console.log("組件即將發(fā)生更新")
    },
    updated(){
        // console.log("組件已經(jīng)發(fā)生更新")
    },
    beforeDestroy(){
        // console.log("組件即將被卸載")
    },
    destroyed(){
        // console.log("組件已經(jīng)被卸載")
    }
}

整個生命周期的圖示為:

lifecycle.png
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • <!DOCTYPE html> Title {{msg}} /...
    點木子閱讀 88評論 0 0
  • Vue實例有一個完整的生命周期,也就是從開始創(chuàng)建、初始化數(shù)據(jù)、編譯模板、掛載Dom、渲染→更新→渲染、卸載等一系列...
    敲鍵盤的那些年閱讀 786評論 1 0
  • 什么是生命周期:從VUE實例創(chuàng)建、運行、到銷毀期間,總是伴隨著各種各樣的事件,這些事件,統(tǒng)稱為生命周期生命周期鉤子...
    7ColorLotus閱讀 293評論 0 1
  • Vue把整個生命周期劃分為創(chuàng)建、掛載、更新、銷毀等階段,每個階段都會給一些“鉤子”讓我們來做一些我們想實現(xiàn)的動作。...
    櫻井咲夜閱讀 259評論 0 0
  • 什么是生命周期:從Vue實例創(chuàng)建、運行到銷毀期間,總是伴隨著各種各樣的事件,這些事件,統(tǒng)稱為生命周期! 生命周期鉤...
    Flipped_kk閱讀 301評論 0 4

友情鏈接更多精彩內容