生命周期
定義:
每個 Vue 實例在被創建時都要經過從創建倒掛載再到更新、卸載的一系列過程,同時在這個過程中也會運行一些叫做生命周期鉤子的函數,可以讓我們用自己注冊的js方法控制整個大局,在這些事件響應方法中的this直接指向的是vue的實例。
鉤子函數的執行時間
beforeCreate
在實例初始化之后,數據觀測(data observer) 和 event/watcher 事件配置之前被調用。
created
實例已經創建完成之后被調用。在這一步,實例已完成以下的配置:數據觀測(data observer),屬性和方法的運算, watch/event 事件回調。然而,掛載階段還沒開始,$el 屬性目前不可見。
beforeMount
在掛載開始之前被調用:相關的 render 函數首次被調用。
mounted
el 被新創建的 vm.$el 替換,并掛載到實例上去之后調用該鉤子。
beforeUpdate
數據更新時調用,發生在虛擬 DOM 重新渲染和打補丁之前。
updated
由于數據更改導致的虛擬 DOM 重新渲染和打補丁,在這之后會調用該鉤子。
beforeDestroy
實例銷毀之前調用。在這一步,實例仍然完全可用。
destroyed
Vue 實例銷毀后調用。調用后,Vue 實例指示的所有東西都會解綁定,所有的事件監聽器會被移除,所有的子實例也會被銷毀。 該鉤子在服務器端渲染期間不被調用。
還有兩個特殊的(配合使用keep-alive):activated、deactivated
activated
keep-alive組件被激活時調用
deactivated
keep-alive組件被停用時調用
鉤子函數中該做的事情
created
實例已經創建完成,因為它是最早觸發的原因可以進行一些數據,資源的請求。
mounted
實例已經掛載完成,可以進行一些DOM操作
beforeUpdate
可以在這個鉤子中進一步地更改狀態,這不會觸發附加的重渲染過程。
updated
可以執行依賴于 DOM 的操作。然而在大多數情況下,你應該避免在此期間更改狀態,因為這可能會導致更新無限循環。
該鉤子在服務器端渲染期間不被調用。
destroyed
可以執行一些優化操作
keep-alive
在使用vue-router時有時需要使用來緩存組件狀態,這個時候created鉤子就不會被重復調用了,如果我們的子組件需要在每次加載的時候進行某些操作,可以使用activated鉤子觸發。