vue生命週期

2022-10-11 00:24:13 字數 2055 閱讀 1222

在vue的建立,使用,銷毀過程中,會有許多事件,這些事件就被統稱為生命週期函式,也叫作生命週期鉤子。

一般來說,生命週期包括:

beforecreat   created  beforemount  mounted  beforeupdate  updated

beforedestory destoryed

首先,我們可以進行簡單的歸類:

建立期間生命週期函式:beforecreat,created,beforemount,mounted

執行期間生命週期函式:beforeupdate,updated

銷毀期間生命週期函式:beforedestroy,destroyed

建立階段:

第乙個生命週期函式:beforecreat,當執行beforecreat生命週期函式時,vue例項

還沒有被完全建立出來,此時data,methods等內部沒有初始化,我們這個時候在函式

內呼叫資料的話,後台會顯示undefined。把data選項上的屬性放到this上,遍歷data

選項,給每個屬性新增getter/setter(劫持)

第二個生命週期函式:created,執行這個函式的時候,vue例項已經初始化了,可以在

這裡呼叫資料,不過還沒渲染到頁面上。 在當前函式中我們可以訪問到data中的屬性,

此時,會將data中的屬性和methods的方法新增到vue的例項身上,同時會將data中所

有的屬性新增乙個getter/setter方法。如果需要進行前後端上資料互動(ajax請求的

時候) 需要在當前生命週期中使用。找el、找template,得到有效的檢視結構,把

template選項編譯成render函式(為了生成虛擬dom作準備)

第三個生命週期函式:beforemount,這時,呼叫render方法第一次生成虛擬dom,vue

已經將模板字串編譯成記憶體dom,模板已經編譯完成,還沒有渲染到頁面上。

'ps:什麼是虛擬dom?本質上就是乙個json資料,用於描述檢視結構,儲存在檢視中

為什麼要使用虛擬dom呢?有了虛擬dom,就可以避免我們頻繁的操作dom,降低人為的dom

濫用,可以提公升web的效能。根據虛擬dom結構,第一次初始化檢視結構(生成真實的dom),

這裡會產生第一次的touch,toach的結果是依賴收集'

第四個生命週期函式:mounted,建立階段完成,頁面渲染完畢,進入執行階段。此時

我們可以通過$refs來訪問到真實的dom結構。ref類似與id一樣 值必須是唯一的,訪問

的時候我們可以使用this.$refs.屬性

執行階段

當資料發生變化,比如觸發了點選事件改動資料

beforeupdate:記憶體中的資料已經改變,頁面上的還沒更新根據新的data,render生成新

的虛擬dom,此時在電腦記憶體中就有了兩個虛擬dom。patch(newvnode、oldvnode) => diff,

使用diff運算找出新舊虛擬dom之間的最小差異,通知watcher來更新它們,檢視再次更新完成。

updated:頁面上資料和記憶體中的一致,條件:當路由切換或呼叫this.$destroy()時

銷毀階段

beforedestroy:出發這個函式時,還沒開始銷毀,此時剛剛脫離執行階段。data,methods,

指令之類的都在正常執行。在這個生命週期函式中我們可以將繫結的事件進行移除。清除快取,

關閉定時器。拆卸掉當前元件對應的watcher、解綁當前元件中事件處理器;遞迴拆卸掉(強制

銷毀)所有的子元件。

destroyed:元件銷毀完畢,data,methods,指令之類的不可用。

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...