? ? 前言:記錄下學(xué)習(xí)vue過程中的生命周期鉤子函數(shù)馏谨,主要分清楚鉤子函數(shù)的意思匆篓,大致什么時候使用惨奕。
? ? 官方所述:所有的生命周期鉤子自動綁定?this?上下文到實(shí)例中火架,因此你可以訪問數(shù)據(jù)诡延,對屬性和方法進(jìn)行運(yùn)算滞欠。這意味著你不能使用箭頭函數(shù)來定義一個生命周期方法?
一、生命周期重要圖
二肆良、生命周期鉤子
(1)beforeCreate:在實(shí)例初始化之后筛璧,數(shù)據(jù)觀測 (data observer) 和 event/watcher 事件配置之前被調(diào)用;
(2)created:實(shí)例創(chuàng)建完成后被立即調(diào)用惹恃。在這一步夭谤,實(shí)例已完成以下的配置:數(shù)據(jù)觀測 (data observer),屬性和方法的運(yùn)算巫糙,watch/event 事件回調(diào)朗儒。然而,掛載階段還沒開始,$el?屬性目前尚不可用醉锄。通俗講就是乏悄,在模板渲染成html前調(diào)用,即通常是初始化某些屬性值恳不,然后再渲染成視圖檩小。頁面加載后刷新頁面,可以重復(fù)執(zhí)行妆够。
(3)beforeMount:在掛載開始之前被調(diào)用:相關(guān)的?render?函數(shù)首次被調(diào)用识啦,該鉤子在服務(wù)器端渲染期間不被調(diào)用
? (4)mounted:實(shí)例被掛載后調(diào)用负蚊,這時?el?被新創(chuàng)建的?vm.$el?替換了神妹。 如果根實(shí)例掛載到了一個文檔內(nèi)的元素上,當(dāng)mounted被調(diào)用時vm.$el也在文檔內(nèi)家妆。通俗講就是在模板渲染成html后調(diào)用鸵荠,通常是初始化頁面完成后,再對HTML中的dom節(jié)點(diǎn)進(jìn)行的一些操作伤极。mounted通常在一些插件的使用或者組件的使用中進(jìn)行操作蛹找。只在頁面第一次加載后才調(diào)用,只要el被加載過哨坪,之后的重復(fù)加載該頁面就不會調(diào)用該鉤子函數(shù)庸疾。
注意?mounted?不會保證所有的子組件也都一起被掛載。如果你希望等到整個視圖都渲染完畢当编,可以在?mounted?內(nèi)部使用?vm.$nextTick
(5)beforeUpdate:數(shù)據(jù)更新時調(diào)用届慈,發(fā)生在虛擬 DOM 打補(bǔ)丁之前。這里適合在更新之前訪問現(xiàn)有的 DOM忿偷,比如手動移除已添加的事件監(jiān)聽器金顿。
該鉤子在服務(wù)器端渲染期間不被調(diào)用,因?yàn)橹挥谐醮武秩緯诜?wù)端進(jìn)行鲤桥。
(6)update:由于數(shù)據(jù)更改導(dǎo)致的虛擬 DOM 重新渲染和打補(bǔ)丁揍拆,在這之后會調(diào)用該鉤子。
當(dāng)這個鉤子被調(diào)用時茶凳,組件 DOM 已經(jīng)更新嫂拴,所以你現(xiàn)在可以執(zhí)行依賴于 DOM 的操作。然而在大多數(shù)情況下贮喧,你應(yīng)該避免在此期間更改狀態(tài)顷牌。如果要相應(yīng)狀態(tài)改變,通常最好使用計算屬性或?watcher?取而代之塞淹。
(7)activated:被 keep-alive 緩存的組件激活時調(diào)用
(8)deactivated:被 keep-alive 緩存的組件停用時調(diào)用
(9)beforeDestroy:實(shí)例銷毀之前調(diào)用窟蓝。在這一步,實(shí)例仍然完全可用
(10)destroyed:實(shí)例銷毀后調(diào)用。該鉤子被調(diào)用后运挫,對應(yīng) Vue 實(shí)例的所有指令都被解綁状共,所有的事件監(jiān)聽器被移除,所有的子實(shí)例也都被銷毀
(11)errorCaptured:當(dāng)捕獲一個來自子孫組件的錯誤時被調(diào)用谁帕。此鉤子會收到三個參數(shù):錯誤對象峡继、發(fā)生錯誤的組件實(shí)例以及一個包含錯誤來源信息的字符串。此鉤子可以返回?false?以阻止該錯誤繼續(xù)向上傳播匈挖。