vue父子組件鉤子函數的執行順序
- 2019 年 10 月 15 日
- 筆記
載入渲染過程
父beforeCreate->父created->父beforeMount->子beforeCreate->子created->子beforeMount->子mounted->父mounted
更新過程
父beforeUpdate->子beforeUpdate->子updated->父updated
銷毀過程
父beforeDestroy->子beforeDestroy->子destroyed->父destroyed
補充鉤子函數的執行順序
總結:
1.beforeCreate執行時:data和el均未初始化,值為undefined
2.created執行時:Vue 實例觀察的數據對象data已經配置好,已經可以得到data的值,但Vue 實例使用的根 DOM 元素el還未初始化
3.beforeMount執行時:data和el均已經初始化,但此時el並沒有渲染進數據,el的值為“虛擬”的元素節點
4.mounted執行時:此時el已經渲染完成並掛載到實例上
5.beforeUpdate和updated觸發時,el中的數據都已經渲染完成,但只有updated鉤子被調用時候,組件dom才被更新。
思考:
1.在created鉤子中可以對data數據進行操作,這個時候可以進行數據請求將返回的數據賦給data
2.在mounted鉤子對掛載的dom進行操作,此時,DOM已經被渲染到頁面上。
3.雖然updated函數會在數據變化時被觸發,但卻不能準確的判斷是那個屬性值被改變,所以在實際情況中用computed或match函數來監聽屬性的變化,並做一些其他的操作。
4.所有的生命周期鉤子自動綁定 this
上下文到實例中,所以不能使用箭頭函數來定義一個生命周期方法 (例如 created: () => this.fetchTodos()
)。這是導致this指向父級。
5.在使用vue-router時有時需要使用<keep-alive></keep-alive>來快取組件狀態,這個時候created鉤子就不會被重複調用了,如果我們的子組件需要在每次載入或切換狀態的時候進行某些操作,可以使用activated鉤子觸發。