Vue生命周期分為四個(gè)階段(常用的有8個(gè),實(shí)際上vue總共有11個(gè))
第一階段(創(chuàng)建階段)
beforeCreate
在beforeCreate之前,Vue做了兩件事:
1袱讹、methods聲明
2闪湾、生命周期鉤子函數(shù)聲明
created
data數(shù)據(jù)注入,data數(shù)據(jù)劫持
1尊搬、遍歷遞歸data選項(xiàng)叁鉴,給每個(gè)聲明式變量添加setter/getter
2、把劫持過變量都放在組件實(shí)例上
第二階段(掛載階段)
beforeMount
在created之后佛寿、beforeMount之前幌墓,vue做了下面這些事
1、通過el冀泻、template尋找組件的視圖模板(帶有指令的HTML字符串)
2常侣、把找到的template視圖(帶有指令的HTML字符串)編譯成render()函數(shù)
mounted
1、根據(jù)render()渲染函數(shù)弹渔,生成“抽象語法樹AST”胳施,再把AST創(chuàng)建成“虛擬DOM(VNode)”(Vnode是真實(shí)DOM的一種數(shù)據(jù)描述,它本質(zhì)上是json格式的數(shù)據(jù))
2捞附、根據(jù)VNode創(chuàng)建真實(shí)DOM(背后有依賴收集巾乳、Watcher工作)把那些聲明式變量都替換成真實(shí)數(shù)據(jù),DOM渲染完成鸟召。
第三階段(更新階段)
beforeUpdate
當(dāng)被被劫持過的data數(shù)據(jù)發(fā)生變化時(shí)胆绊,這將進(jìn)入更新階段
updated
1、當(dāng)vue上下文中的data發(fā)生變化時(shí)欧募,使用render()渲染函數(shù)再生成一新的Vnode
2压状、使用大名鼎鼎的Diff運(yùn)算,patch('old vnode', 'new vnode')找出兩個(gè)Vnode之間最小差異
3跟继、notify通過Watcher根據(jù)“依賴收集”再次更新真實(shí)DOM
為什么要有虛擬DOM這個(gè)的“玩意”种冬?
虛擬DOM存在的價(jià)值,大大地降低了“jQuery時(shí)代下人為尋找DOM變化差異”的不足舔糖,最小化地去更新DOM(盡可能地減少了DOM操作)娱两。所以虛擬DOM是MVVM的本質(zhì)。
第四階段(銷毀階段)
beforeDestory
當(dāng)調(diào)用$destroy()或路由切換時(shí)金吗,組件進(jìn)入銷毀階段
destoryed
1十兢、拆卸掉Watcher趣竣,所以DOM不可能再發(fā)生更新。
2旱物、拆卸掉當(dāng)前組件的所有子組件遥缕,所以這些子組件也都進(jìn)入銷毀階段
3、卸載掉當(dāng)前組件中的事件處理器宵呛。
常用的幾個(gè)階段
created
調(diào)接口单匣、開啟ws長連接
mounted
調(diào)接口、開啟長連接
開定時(shí)器
執(zhí)行一些與DOM的操作
beforeDestroy
關(guān)閉長連接
關(guān)閉定時(shí)器
清除一些占用內(nèi)存的緩存數(shù)據(jù)(vuex宝穗、本地存儲(chǔ)數(shù)據(jù)户秤。。)