Vue生命週期詳解(個人的基本理解)

每個 Vue 實例在被創建時都要經過一系列的初始化過程——例如,需要設置數據監聽、編譯模板、將實例掛載到 DOM 並在數據變化時更新 DOM 等。同時在這個過程中也會運行一些叫做生命週期鉤子的函數,這給了用戶在不同階段添加自己的代碼的機會。

下圖展示了實例的生命週期。

在這裏插入圖片描述

掛載(初始化相關屬性)

1.beforeCreate

當new Vue 實例的時候,還沒有根據配置對象來進行Vue實例的具體配置時觸發,此時組件的選項對象還未創建,el 和 data 並未初始化,因此無法訪問methods, data, computed等上的方法和數據。

2.created

當Vue實例創建完畢的時候觸發,在實例創建完成後被立即調用。

在這一步,實例已完成以下的配置:數據觀測 (data observer),屬性和方法的運算,watch/event 事件回調。然而,掛載階段還沒開始,$el 屬性目前不可見。就是說在這個鉤子裏面,我們可以調用methods中的方法,改變data中的數據,還有獲取computed中的計算屬性等。

然後我個人的話喜歡在這份週期中發送ajax請求,但是這個要注意一個點,這個週期中是沒有聲明方法可以對實例化過程進行攔截的,如果必須有某些數據才能進入頁面的話,不適合在這個週期發送請求。建議在組件路由鉤子beforeRouteEnter中完成。

如何有這種需求的話可以去官網看下
https://router.vuejs.org/zh/guide/advanced/navigation-guards.html#%E8%B7%AF%E7%94%B1%E7%8B%AC%E4%BA%AB%E7%9A%84%E5%AE%88%E5%8D%AB

3.beforeMount

在實例進行掛載的時候觸發,實例與app掛載的時候。掛在開始之前被調用,相關的render函數首次被調用(虛擬DOM),實例已完成以下的配置: 編譯模板,把data裏面的數據和模板生成html,完成了el和data 初始化,但是此時還沒有掛載html到頁面上。

4.mounted

將容器初始化完畢,將容器模板也準備完畢時候觸發。掛載頁面,將html渲染到頁面中,此時可以執行一些請求操作,這個事件只會執行一次。

​一般會在mounted聲明週期時發送ajax獲取需要的數據,不過我的話可能不一樣。慚愧,之前用習慣了。

更新(元素或組件的變更操作)

1.beforeUpdata

在更新data中的數據之前觸發。我們可以在beforeUpdate生命週期中驗證用戶更新的最新的數據是否正確

2.updated

在數據更新完畢時觸發

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

當這個鉤子被調用時,組件 DOM 已經更新,所以你現在可以執行依賴於 DOM 的操作。然而在大多數情況下,你應該避免在此期間更改狀態。如果要相應狀態改變,通常最好使用計算屬性或 watcher 取而代之。

銷燬(銷燬相關屬性)

1.beforeDestroy

在銷燬Vue實例前觸發,在此時我們可以去釋放,清空變量保存的數據。在這一步,實例仍然完全可用。一般在這一步做一些重置的操作,比如清除掉組件中的定時器 和 監聽的dom事件。

2.destroyed

在銷燬Vue實例後觸發,在實例銷燬之後調用,調用後,所以的事件監聽器會被移出,所有的子實例也會被銷燬,該鉤子在服務器端渲染期間不被調用

補充:
如何銷燬Vue實例
this.$destroy()

個人水平有限,有問題歡迎大家留言指導,僅供學習和參考。

學海無涯!努力二字,共勉!

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