1.什么是生命周期
官方定義:
任何 Vue 實(shí)例在被創(chuàng)建時(shí)都要經(jīng)過一系列的初始化過程,需要設(shè)置數(shù)據(jù)監(jiān)聽疲吸、編譯模板座每、將實(shí)例掛載到 DOM 并在數(shù)據(jù)變化時(shí)更新 DOM 等。同時(shí)在這個(gè)過程中也會(huì)運(yùn)行一些叫做生命周期鉤子的函數(shù)摘悴,方便讓用戶在不同階段添加對(duì)應(yīng)的運(yùn)行代碼
個(gè)人定義:
生命周期函數(shù)是指組件在某一階段調(diào)用的函數(shù)
lifecycle.png
通過圖示可以看出生命周期可以分為四個(gè)階段和八種狀態(tài):
四個(gè)階段:
create 創(chuàng)建階段
mount 掛載階段
update 更新階段
destroy 銷毀階段
八種狀態(tài):
beforeCreate()方法是在實(shí)例還沒有別完全創(chuàng)建出來之前執(zhí)行峭梳,這個(gè)方法執(zhí)行的時(shí)候,無論是data中的數(shù)據(jù)還是methods中的方法都沒有被初始化蹂喻,所有的值都為undefined
created()方法是此時(shí)已經(jīng)初始化好了Vue對(duì)象葱椭,這是最早能操作data中數(shù)據(jù)和methods中方法的地方
beforeMount()這是指該模板已經(jīng)在內(nèi)存中編輯完成,但是尚未將其渲染到頁面中去口四,在該方法執(zhí)行期間孵运,頁面中的元素還沒有經(jīng)過Vue的渲染,此時(shí)的{{msg}}仍然是一個(gè)“{{msg}}”
mounted()蔓彩,表示內(nèi)存中的模板已經(jīng)渲染到頁面中去掐松,這個(gè)時(shí)候數(shù)據(jù)已經(jīng)可以經(jīng)過Vue的編譯踱侣,該函數(shù)是實(shí)例創(chuàng)建的最后一個(gè)函數(shù)粪小,此時(shí)實(shí)例已經(jīng)完全創(chuàng)建好了大磺,如果沒有別的操作的話,此函數(shù)就靜靜躺在內(nèi)存中探膊,如果要使用某些插件操作頁面上的DOM杠愧,最早要在mount中操作
beforeUpdate()事件執(zhí)行的時(shí)候,頁面中顯示的數(shù)據(jù)并沒有更新逞壁,但是內(nèi)存中的數(shù)據(jù)已經(jīng)改變流济,也就是說此時(shí)頁面尚未和最新的數(shù)據(jù)保持同步
update()事件執(zhí)行的時(shí)候,頁面中的數(shù)據(jù)已經(jīng)和內(nèi)存中保持一致了腌闯,也就是說此時(shí)已經(jīng)是最新的了
beforeDestroy() 當(dāng)執(zhí)行beforeDestroy階段時(shí)vue實(shí)例已經(jīng)從運(yùn)行階段绳瘟,進(jìn)入到銷毀階段,但是此時(shí)項(xiàng)data和methods里面的屬性和方法還依然可以使用
destroyed() 當(dāng)執(zhí)行到destroyed時(shí)組件已經(jīng)完全被銷毀姿骏,此時(shí)實(shí)例中所有的屬性糖声、方法、過濾器等等都已不能再去使用