Vue生命周期分為四個階段(常用的有8個,實際上vue總共有11個)
第一階段(創建階段)
beforeCreate
在beforeCreate之前,Vue做了兩件事:
1、methods聲明
2、生命周期鉤子函數聲明
created
data數據注入,data數據劫持
1、遍歷遞歸data選項,給每個聲明式變量添加setter/getter
2、把劫持過變量都放在組件實例上
第二階段(掛載階段)
beforeMount
在created之后、beforeMount之前,vue做了下面這些事
1、通過el、template尋找組件的視圖模板(帶有指令的HTML字符串)
2、把找到的template視圖(帶有指令的HTML字符串)編譯成render()函數
mounted
1、根據render()渲染函數,生成“抽象語法樹AST”,再把AST創建成“虛擬DOM(VNode)”(Vnode是真實DOM的一種數據描述,它本質上是json格式的數據)
2、根據VNode創建真實DOM(背后有依賴收集、Watcher工作)把那些聲明式變量都替換成真實數據,DOM渲染完成。
第三階段(更新階段)
beforeUpdate
當被被劫持過的data數據發生變化時,這將進入更新階段
updated
1、當vue上下文中的data發生變化時,使用render()渲染函數再生成一新的Vnode
2、使用大名鼎鼎的Diff運算,patch('old vnode', 'new vnode')找出兩個Vnode之間最小差異
3、notify通過Watcher根據“依賴收集”再次更新真實DOM
為什么要有虛擬DOM這個的“玩意”?
虛擬DOM存在的價值,大大地降低了“jQuery時代下人為尋找DOM變化差異”的不足,最小化地去更新DOM(盡可能地減少了DOM操作)。所以虛擬DOM是MVVM的本質。
第四階段(銷毀階段)
beforeDestory
當調用$destroy()或路由切換時,組件進入銷毀階段
destoryed
1、拆卸掉Watcher,所以DOM不可能再發生更新。
2、拆卸掉當前組件的所有子組件,所以這些子組件也都進入銷毀階段
3、卸載掉當前組件中的事件處理器。
常用的幾個階段
created
調接口、開啟ws長連接
mounted
調接口、開啟長連接
開定時器
執行一些與DOM的操作
beforeDestroy
關閉長連接
關閉定時器
清除一些占用內存的緩存數據(vuex、本地存儲數據。。)