vue生命週期

2021-10-04 10:07:04 字數 2510 閱讀 4063

生命週期:乙個元件從建立到銷毀的一系列過程就叫做這個元件的生命週期。

每乙個元件或者例項都會經歷乙個完整的生命週期,乙個生命週期總共分為三個階段,其中又共包含了八種生命週期鉤子函式:

初始階段:beforecreate ; created ; beforemount ; mounted

執行階段:beforeupdate ; updated

銷毀階段: beforedestroy ; destroyed

如下列的生命週期圖:

1.beforecreate這個鉤子函式在建立元件初始化的時候會立刻執行,並且在這個鉤子函式裡是獲取不到資料的,而此時頁面中的真實dom節點為null,沒有掛在出來。

2.created這個鉤子函式內部的資料已經掛載了,但真實dom節點也還是沒有渲染出來,通常會在這個鉤子函式裡面進行ajax的非同步操作。

3.beforemount是讓元件或者實列去查詢各自的模板,而後將其編譯成虛擬dom,即將放入render函式中做初始化渲染操作。

4.mounted這是初始化階段的最後乙個鉤子函式,資料掛在完成,真實的dom已經渲染出來了。

5.beforeupdate這個鉤子函式只有當dom掛載完成,並且進行資料的更新時,才會被執行。

6.updated這個鉤子函式裡dom獲取的資料內容是更新後的資料內容。

7.beforedestroy元件銷毀時觸發,在銷毀前可以清楚一些事件繫結。

8.destroyed元件銷毀時觸發,vue例項解除了事件監聽以及和dom的繫結(無響應了),但dom節點依舊是存在的

下面是乙個swiper輪播圖案列:

:因為這個案例主要是便於讓我們更好的去理解生命週期,所以只有部分(主要)**,只要知道我們遇到生命週期什麼問題,怎麼解決就可以了,下面會說到

建立結構模板的**:

"box"

>

<

/my-banner>

<

/div>

"my-banner"

>

="swiper-container"

>

=>

="swiper-slide" v-

for=

"banner in banners"

>

"100%"

:src=

"banner.image" alt=

"">

<

/div>

<

/div>

<

/div>

<

/template>js**:

vue.

component

("my-banner",}

,created()

)})}

})

如果向上面這樣寫的話,就會出現bug——輪播圖划動不了

解決:頁面當中的swiper-slide真實dom全都渲染完畢了,再去進行swiper的例項化操作,也就是把new swiper(".swiper-container",)放到最後操作

下面例舉了哪種鉤子函式能夠解決成功:

beforemount 鉤子函式不能解決,因為這個時候真實的dom還沒有渲染出來,這個鉤子函式獲取不到真實dom的結構。

created()

)},beforemount()

)}

mounted 鉤子函式也不能解決,因為上面是非同步的過程,他不會阻止後續mounted的相關操作。內部的非同步請求邊去進行請求資料的同時,下面的mounted鉤子函式也正在執行,當資料回來進行進行更改操作,其實這個例項化操作早就結束了

created()

)},mounted()

)}

beforeupdate 這個鉤子函式裡面也不可以,因為當dom掛載完畢的時候,當資料發生改變的時候,他會立馬執行!

created()

)},beforeupdate()

)}

updated 這個鉤子函式是可以的,當資料發生改變的時候,引發虛擬dom的對比,虛擬dom對比完成後,再去渲染真實的dom結構當真實的dom結構渲染完成後,內部才會執行updated鉤子函式

created()

)},updated()

)}

最後理解了vue的生命週期鉤子函式的執行,我們就知道在哪個階段,我們可以做些什麼了

vue生命週期

beforecreate 元件例項剛剛被建立,屬性都沒有 create 例項已經建立完成,屬性已經繫結 beforemount 模板編譯之前 mounted 模板編譯之後 beforeupdate 元件更新之前 updated 元件更新完畢 beforedestroy 元件銷毀之前 destroye...

vue生命週期

vue把整個生命週期劃分為建立 掛載 更新 銷毀等階段,每個階段都會給一些 鉤子 讓我們來做一些我們想實現的動作。學習例項的生命週期,能幫助我們理解vue例項的運作機制,更好地合理利用各個鉤子來完成我們的業務 我們分別來看看這幾個階段 1.beforecreate 此階段為例項初始化之後,此時的資料...

Vue 生命週期

import vue from vue el root 沒有的話,使用render,繼續沒有,就把el的outerhtml編譯成模板 template temp data beforecreate created el是原來的el beforemount 渲染函式 render h this.tex...