在 Vue.js 中,頁面生命周期(更準確地說是組件生命周期)指的是組件從創建到銷毀的一系列過程。了解這些生命周期鉤子可以幫助我們更好地管理組件的狀態和行為。以下是 Vue 組件的主要生命周期鉤子:
-
beforeCreate
- 在實例初始化之后,數據觀測 (data observer) 和 event/watcher 事件配置之前被調用。
- 此時組件的選項對象還未被創建,
el
和data
都不存在。
-
created
- 在實例創建完成后被立即調用。在這一步,實例已完成以下的配置:數據觀測 (data observer),屬性和方法的運算,以及
watch/event
事件回調。然而,掛載階段還沒開始,$el
屬性目前不可見。 - 在這個階段,可以訪問組件的
data
和computed
屬性,以及調用methods
方法,但 DOM 還未掛載,因此無法訪問$el
或vm.$el
。
- 在實例創建完成后被立即調用。在這一步,實例已完成以下的配置:數據觀測 (data observer),屬性和方法的運算,以及
-
beforeMount
- 在掛載開始之前被調用:相關的
render
函數首次被調用。 - 在這個階段,虛擬 DOM 已經創建,但還未掛載到真實 DOM,可以訪問
this.$el
(它是一個空的虛擬節點),但內容尚未渲染到頁面上。
- 在掛載開始之前被調用:相關的
-
mounted
el
被新創建的vm.$el
替換,并掛載到實例上去之后調用該鉤子。如果 root 實例掛載了一個在內聯模板中渲染的元素,當 mounted 被調用時 vm.$el 也在文檔內。- 此時組件已經渲染到頁面上,可以訪問 DOM,執行依賴于 DOM 的操作。
-
beforeUpdate
- 數據更新時調用,發生在虛擬 DOM 打補丁之前。
- 在這個階段,
data
中的數據是最新的,但虛擬 DOM 還未更新,所以頁面還未渲染最新的數據。
-
updated
- 由于數據更改導致的虛擬 DOM 重新渲染和打補丁,在這之后會調用該鉤子。
- 在這個階段,虛擬 DOM 已經更新,并且頁面也已經渲染最新的數據。但要注意避免在這個鉤子中執行過多的操作,因為它可能會引發額外的渲染。
-
beforeDestroy
- 實例銷毀之前調用。在這一步,實例仍然完全可用。
- 在這個階段,組件實例仍然有效,但即將被銷毀。你可以在這個鉤子中執行一些清理操作,如清除定時器、解綁全局事件、銷毀插件對象等。
-
destroyed
- Vue 實例銷毀后調用。調用后,Vue 實例指示的所有東西都會解綁,所有的事件監聽器會被移除,所有的子實例也都會被銷毀。
- 此時組件已被完全銷毀,無法再訪問組件實例或 DOM 元素。
需要注意的是,在 Vue 3 中,新增了一個 setup
鉤子,它是 beforeCreate
和 created
之間的生命周期鉤子,用于在組件創建之前設置響應式狀態和執行副作用(例如,設置偵聽器或計算屬性)。但是,由于 setup
是在 beforeCreate
和 created
鉤子之前調用的,因此在 setup
中無法訪問 this
。同時,Vue 3 也提供了 Composition API
,它提供了一種更靈活的方式來組織和重用邏輯代碼。