Vue 實例生命週期

生命週期


什麼是生命週期

Vue 實例有一個完整的生命週期,也就是從 開始創建初始化數據編譯模板掛載 Dom渲染→更新→渲染卸載等一系列過程,我們稱這是** Vue 的生命週期***。通俗說就是 Vue 實例從創建到銷燬的過程,就是生命週期。

在 Vue 的整個生命週期中,它提供了一系列的事件,可以讓我們在事件觸發時註冊 js 方法,可以讓我們用自己註冊的 js 方法控制整個大局,在這些事件響應方法中的 this 直接指向的是 vue 的實例。

特別值得注意的是 created 鉤子函數和 mounted 鉤子函數的區別:

  • created:在模板渲染成 html 前調用,即通常初始化某些屬性值,然後再渲染成視圖。在 created 的時候,視圖中的 html 並沒有渲染出來,所以此時如果直接去操作 html 的 dom 節點,一定找不到相關的元素

  • mounted:在模板渲染成 html 後調用,通常是初始化頁面完成後,再對 html 的 dom 節點進行一些需要的操作。在 mounted 中,由於此時 html 已經渲染出來了,所以可以直接操作 dom 節點。

其實兩者比較好理解,通常 created 使用的次數多,而 mounted 通常是在一些插件的使用或者組件的使用中進行操作,比如插件 chart.js 的使用: var ctx = document.getElementById(ID); 通常會有這一步,而如果你寫入組件中,你會發現在 created 中無法對 chart 進行一些初始化配置,一定要等這個 html 渲染完後纔可以進行,那麼 mounted 就是不二之選。

鉤子函數觸發時間


beforeCreate

在實例初始化之後,數據觀測(data observer) 和 event/watcher 事件配置之前被調用。

created

在模板渲染成 html 前調用,實例創建完成之後被調用。在這一步,實例已完成以下的配置:數據觀測(data observer),屬性和方法的運算, watch/event 事件回調。然而,掛載階段還沒開始,$el 屬性目前不可見。

beforeMount

在掛載開始之前被調用:相關的 render 函數首次被調用。

mounted

el 被新創建的 vm.$el 替換,並掛載到實例上去之後調用該鉤子。

beforeUpdate

數據更新時調用,發生在虛擬 DOM 重新渲染和打補丁之前。 你可以在這個鉤子中進一步地更改狀態,這不會觸發附加的重渲染過程。

updated

由於數據更改導致的虛擬 DOM 重新渲染和打補丁,在這之後會調用該鉤子。

當這個鉤子被調用時,組件 DOM 已經更新,所以你現在可以執行依賴於 DOM 的操作。然而在大多數情況下,你應該避免在此期間更改狀態,因爲這可能會導致更新無限循環。

該鉤子在服務器端渲染期間不被調用。

beforeDestroy

實例銷燬之前調用。在這一步,實例仍然完全可用。

destroyed

Vue 實例銷燬後調用。調用後,Vue 實例指示的所有東西都會解綁定,所有的事件監聽器會被移除,所有的子實例也會被銷燬。 該鉤子在服務器端渲染期間不被調用。

參考 1

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章