Vue 實例從創建到銷毀的過程,就是生命周期。也就是從開始創建、初始化數據、編譯模板、掛載Dom→渲染、更新→渲染、卸載等一系列過程,我們稱這是 Vue 的生命周期。
一.創建/銷毀,緩存
1.created & beforeCreate
beforeCreate 實例未創建,調用不到data數據
created 實例創建完成后調用,此階段完成了數據的觀測等,但尚未掛載
應用:
beforeCreate,加loading事件;
created, 寫一些用於初始化完成的事件;結束loading事件,ajax 異步請求獲取數據
2.destroyed & beforeDestroy
beforeDestroy 實例銷毀之前調用
destroyed 實例銷毀之后調用
在父組件中使用v-if來控制實例的銷毀和創建
應用: 主要在實例銷毀之前解綁一些使用addEventListener 監聽的事件等;可以做一個確認停止事件的確認框
補充說明,actived & deactive
使用內置組件 keep-alive 來緩存實例,而不是頻繁創建和銷毀(開銷大)
actived 實例激活
deactived 實例失效
在父組件中使用keep-alive來實現實例的緩存
此時v-if不再控制實例的銷毀和創建,而是配合控制緩存實例的激活和失效
應用:性能優化
初始化的時候,undefined(對應的是beforeCreate事件),'000'(對應的created事件),'激活了'(對應的是actived事件);
注意到之后再點擊兩次button,相繼出現 '失效了' '激活了' ,此時控制的不再是銷毀(destroyed)/創建(created),而是 失效(對應的是deactived事件)和激活(對應的是actived事件);
從而達到通過緩存來進行性能優化的目的
二.掛載,更新
1.mounted & beforeMount
beforeMount (實例創建完)el未掛載到實例上,獲取的是vue啟動前的最初DOM
mounted (實例創建完)並且el掛載到實例上后調用,獲取的是vue啟動后的DOM(執行一次,之后的vue數據變化觸發updated)
2.updated & beforeUpdate
beforeUpdate 獲取數據更新前的原DOM
updated 獲取數據更新后的DOM;
掛載之后,vue的數據改變會引起頁面視圖的改變,此時觸發的是updated事件,而不是mounted(mounted只會在掛載實例的時候調用一次)
應用:獲取調試前后的DOM;對數據統一處理,可以在這里寫上相應函數
mounted只在初始化掛載實例的時候調用一次,之后所有到數據變化都會調用beforeUpdate事件和updated事件(而不是mounted事件)
最后結合官網的圖示,能夠理出一個比較清晰的思路來