生命周期
定義:
每個 Vue 實例在被創(chuàng)建時都要經(jīng)過從創(chuàng)建倒掛載再到更新鸿脓、卸載的一系列過程勋磕,同時在這個過程中也會運行一些叫做生命周期鉤子的函數(shù),可以讓我們用自己注冊的js方法控制整個大局色鸳,在這些事件響應方法中的this直接指向的是vue的實例。
鉤子函數(shù)
beforeCreate
在實例初始化之后舞萄,數(shù)據(jù)觀測(data observer) 和 event/watcher 事件配置之前被調(diào)用。
created
實例已經(jīng)創(chuàng)建完成之后被調(diào)用管削。在這一步倒脓,實例已完成以下的配置:數(shù)據(jù)觀測(data observer),屬性和方法的運算含思, watch/event 事件回調(diào)崎弃。然而,掛載階段還沒開始含潘,$el 屬性目前不可見饲做。
實例已經(jīng)創(chuàng)建完成,因為它是最早觸發(fā)的原因可以進行一些數(shù)據(jù)遏弱,資源的請求盆均。
beforeMount
在掛載開始之前被調(diào)用:相關(guān)的 render 函數(shù)首次被調(diào)用。
mounted
el 被新創(chuàng)建的 vm.$el 替換漱逸,并掛載到實例上去之后調(diào)用該鉤子泪姨。
實例已經(jīng)掛載完成,可以進行一些DOM操作
beforeUpdate
數(shù)據(jù)更新時調(diào)用饰抒,發(fā)生在虛擬 DOM 重新渲染和打補丁之前肮砾。
可以在這個鉤子中進一步地更改狀態(tài),這不會觸發(fā)附加的重渲染過程袋坑。
updated
由于數(shù)據(jù)更改導致的虛擬 DOM 重新渲染和打補丁仗处,在這之后會調(diào)用該鉤子。
可以執(zhí)行依賴于 DOM 的操作咒彤。然而在大多數(shù)情況下疆柔,你應該避免在此期間更改狀態(tài),因為這可能會導致更新無限循環(huán)镶柱。該鉤子在服務器端渲染期間不被調(diào)用旷档。
beforeDestroy
實例銷毀之前調(diào)用。在這一步歇拆,實例仍然完全可用鞋屈。
destroyed
Vue 實例銷毀后調(diào)用。調(diào)用后故觅,Vue 實例指示的所有東西都會解綁定厂庇,所有的事件監(jiān)聽器會被移除,所有的子實例也會被銷毀输吏。 該鉤子在服務器端渲染期間不被調(diào)用权旷。
成對比較
- created 和 beforeCreate
- A 可以操作數(shù)據(jù) B 數(shù)據(jù)沒有初始化
- mounted 和 beforeMount
- A 可以操作DOM B 還未生成DOM
- updated 和 beforeUpdate
- A 可以獲取最終數(shù)據(jù) B 可以二次修改
- 頻繁銷毀創(chuàng)建的組件使用內(nèi)置組件<keep-alive></keep-alive>包裹