Vue 生命周期詳解

Vue生命周期

每個(gè)Vue實(shí)例被創(chuàng)建時(shí)都要經(jīng)過一系列得初始化過程,舉一把栗子:需要設(shè)置數(shù)據(jù)監(jiān)聽、編譯、模板、將實(shí)例掛載到DOM并在數(shù)據(jù)變化時(shí)更新DOM等。在這個(gè)過程中也會(huì)運(yùn)行一些叫做 生命周期鉤子 的函數(shù),這給了用戶在不同階段添加自己代碼的機(jī)會(huì)

ps:不要在選項(xiàng)屬性或者回調(diào)上使用 箭頭函數(shù) 栗子:
created: () => consloe.log(this.a)

因?yàn)榧^函數(shù)是和父級上下文綁定在一起的,this 不會(huì)如我們所預(yù)期的指向 vue 實(shí)例,經(jīng)常導(dǎo)致

Uncaught TypeError: Cannot read property of undefined 或 Uncaught TypeError: this.myMethod is not a function 之類的錯(cuò)誤

這里附上一張Vue實(shí)例的生命周期圖:

ps: 我們不需要一下全部弄懂,隨著我們不斷學(xué)習(xí)和使用,它的價(jià)值會(huì)越來越高
Vue生命周期

beforeCreate

場景:

在實(shí)例初始化之后,數(shù)據(jù)觀測(data observer)和 event/watcher事件配置之前調(diào)用

created

場景:

在實(shí)例創(chuàng)建完成后立即被調(diào)用,實(shí)例已完成數(shù)據(jù)觀測(data observer),屬性和方法的運(yùn)算,watch/event事件回調(diào),掛載階段還沒開始

beforeMount

場景:

在掛載開始之前被調(diào)用,相關(guān)的render函數(shù)首次被調(diào)用
ps:該鉤子在服務(wù)器端渲染期間不被調(diào)用

mounted

場景:

el 被創(chuàng)建的 vm.$el 替換,并在掛載到實(shí)例上去之后調(diào)用該鉤子,如果root實(shí)例掛載了一個(gè)文檔元素,當(dāng)mounted被調(diào)用 vm.$el 也在文檔內(nèi)

beforeUpdate

場景:

數(shù)據(jù)更新時(shí)調(diào)用,發(fā)生在虛擬DOM打補(bǔ)丁之前,這里適合在更新之前訪問現(xiàn)有的DOM,比如手動(dòng)移除已添加的事件監(jiān)聽器
該鉤子在服務(wù)器端渲染期間不被調(diào)用,因?yàn)橹挥谐醮武秩緯?huì)在服務(wù)端進(jìn)行。

updated

場景:

數(shù)據(jù)更新時(shí)調(diào)用,發(fā)生在虛擬 DOM 打補(bǔ)丁之前。這里適合在更新之前訪問現(xiàn)有的 DOM,比如手動(dòng)移除已添加的事件監(jiān)聽器。
該鉤子在服務(wù)器端渲染期間不被調(diào)用,因?yàn)橹挥谐醮武秩緯?huì)在服務(wù)端進(jìn)行。

activated

場景:

keep-alive 組件激活時(shí)調(diào)用。
該鉤子在服務(wù)器端渲染期間不被調(diào)用。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容