什么是生命周期方法?
生命周期鉤子=生命周期函數(shù)=生命周期事件Vue生命周期方法分類
?創(chuàng)建期間的生命周期方法:
?1) beforeCreate階段:vue實例的掛載元素el和數(shù)據(jù)對象data都為undefined按厘,還未初始化欲诺。
?說明:在當前階段data插佛、methods、computed以及watch上的數(shù)據(jù)和方法都不能被訪問懦底。
?2) created階段:vue實例的數(shù)據(jù)對象data有了,el還沒有往史。
?說明:可以做一些初始數(shù)據(jù)的獲取花枫,在當前階段無法與Dom進行交互,如果非要想尚困,可以通過vm.$nextTick來訪問Dom蠢箩。
?載入期間的生命周期方法:
?1)beforeMount階段: vue實例的el和data都初始化了,但掛載之前為虛擬的dom節(jié)點事甜。
?說明:當前階段虛擬Dom已經(jīng)創(chuàng)建完成谬泌,即將開始渲染。在此時也可以對數(shù)據(jù)進行更改逻谦,不會觸發(fā)updated掌实。
?2)mounted階段:vue實例掛載完成,data.message成功渲染邦马。
?說明:在當前階段贱鼻,真實的Dom掛載完畢宴卖,數(shù)據(jù)完成雙向綁定,可以訪問到Dom節(jié)點邻悬,使用$refs屬性對Dom進行操作症昏。
?更新期間的生命周期方法:
?1)beforeUpdate階段:響應式數(shù)據(jù)更新時調(diào)用,發(fā)生在虛擬DOM打補丁之前父丰,適合在更新之前訪問現(xiàn)有的DOM肝谭,比如手動移除已添加的事件監(jiān)聽器。
?說明:可以在當前階段進行更改數(shù)據(jù)础米,不會造成重渲染分苇。
?2) updated階段:虛擬DOM重新渲染和打補丁之后調(diào)用,組成新的DOM已經(jīng)更新屁桑,避免在這個鉤子函數(shù)中操作數(shù)據(jù)医寿,防止死循環(huán)。
?說明:當前階段組件Dom已完成更新蘑斧。要注意的是避免在此期間更改數(shù)據(jù)靖秩,因為這可能會導致無限循環(huán)的更新。
?銷毀期間的生命周期方法:
?1)beforeDestroy階段:實例銷毀前調(diào)用竖瘾,實例還可以用沟突,this能獲取到實例,常用于銷毀定時器捕传,解綁事件惠拭。
?說明:在當前階段實例完全可以被使用,我們可以在這時進行善后收尾工作庸论,比如清除計時器职辅。
?2) destroyed階段:實例銷毀后調(diào)用,調(diào)用后所有事件監(jiān)聽器會被移除聂示,所有的子實例都會被銷毀域携。
?說明:當前階段組件已被拆解,數(shù)據(jù)綁定被卸除鱼喉,監(jiān)聽被移出秀鞭,子實例也統(tǒng)統(tǒng)被銷毀。
補充:
第一次頁面加載時會觸發(fā):beforeCreate, created, beforeMount, mounted扛禽。
1)created 實例已經(jīng)創(chuàng)建完成锋边,因為它是最早觸發(fā)的原因可以進行一些數(shù)據(jù),資源的請求编曼。(服務器渲染支持created方法)
2)mounted實例已經(jīng)掛載完成宠默,可以進行一些DOM操作。(接口請求)
生命周期鉤子是如何實現(xiàn)的灵巧?
核心答案:
Vue的生命周期鉤子就是回調(diào)函數(shù)而已搀矫,當創(chuàng)建組件實例的過程中會調(diào)用對應的鉤子方法。
補充回答:
內(nèi)部主要是使用callHook方法來調(diào)用對應的方法刻肄。核心是一個發(fā)布訂閱模式瓤球,將鉤子訂閱好(內(nèi)部采用數(shù)組的方式存儲),在對應的階段進行發(fā)布敏弃。
Vue 的父組件和子組件生命周期鉤子執(zhí)行順序?
核心答案:
第一次頁面加載時會觸發(fā) beforeCreate, created, beforeMount, mounted 這幾個鉤子卦羡。
渲染過程:
父組件掛載完成一定是等子組件都掛載完成后,才算是父組件掛載完麦到,所以父組件的mounted在子組件mouted之后
父beforeCreate -> 父created -> 父beforeMount -> 子beforeCreate -> 子created -> 子beforeMount -> 子mounted -> 父mounted