Vue2生命周期

Vue生命周期是指vue實例對象從創(chuàng)建之初到銷毀的過程枝笨,vue所有功能的實現(xiàn)都是圍繞其生命周期進行的,在生命周期的不同階段調(diào)用對應(yīng)的鉤子函數(shù)可以實現(xiàn)組件數(shù)據(jù)管理和DOM渲染兩大重要功能杨伙。
首先上一張圖(如有錯誤歡迎大牛指出,讓小子有所進步)


Life Cycle.jpg

可以看到在vue一整個的生命周期中會有很多鉤子函數(shù)提供給我們在vue生命周期不同時刻進行操作萌腿,我們列出所有的鉤子函數(shù):
· beforeCreate
· created
· beforeMount
· mounted
· beforeUpdate
· updated
· beforeDestory
· destoryed

什么也不說了限匣,上代碼

<template>
  <div>
      <h2>Essential Links</h2>
        <p>input輸入框的內(nèi)容為:{{msg}}</p>
        <input v-model="msg" placeholder="edit me"/>    <br />
          <button @click="destory">銷毀按鈕</button>
    </div>
</template>
<script>
export default({
        data(){
            return {
                msg: "hello Vue.js"
            }
        },
        methods: {
            //銷毀
            destory() {
                this.$destroy();
            }
        },
        
        beforeCreate() {
            console.group('beforeCreate 創(chuàng)建前狀態(tài) ------------>');      
            console.log("%c%s", "color:red" , "el     : " + this.$el); //undefined
          console.log("%c%s", "color:red","data   : " + this.$data); //undefined
          console.log("%c%s", "color:red","message: " + this.message)
        },
        created() {
            console.group('created 創(chuàng)建完畢狀態(tài) ------------>');      
            console.log("%c%s", "color:red","el     : " + this.$el); //undefined
            console.log("%c%s", "color:red","data   : " + this.$data); //已被初始化
            console.log("%c%s", "color:red","message: " + this.message); //已被初始化
        },
        beforeMount() {
            console.group('beforeMount 掛載前狀態(tài) ------------>');      
            console.log("%c%s", "color:red","el     : " + (this.$el)); //已被初始化
            console.log("%c%s", "color:red","data   : " + this.$data); //已被初始化
            console.log("%c%s", "color:red","message: " + this.message); //已被初始化
        },
        mounted() {
            console.group('mounted 掛載結(jié)束狀態(tài) ------------>');      
            console.log("%c%s", "color:red","el     : " + this.$el); //已被初始化
            console.log(this.$el);      
            console.log("%c%s", "color:red","data   : " + this.$data); //已被初始化
            console.log("%c%s", "color:red","message: " + this.message); //已被初始化
        },
        beforeUpdate() {
            console.group('beforeUpdate 更新前狀態(tài) ------------>'); 
            console.log("%c%s", "color:red","el     : " + this.$el); 
            console.log(this.$el);     
            console.log('真實dom結(jié)構(gòu):' + document.getElementById('app').innerHTML);   
            console.log("%c%s", "color:red","data   : " + this.$data);     
            console.log("%c%s", "color:red","message: " + this.message);
        },
        updated() {
            console.group('updated 更新完成狀態(tài) ------------>'); 
            console.log("%c%s", "color:red","el     : " + this.$el);   
            console.log(this.$el);      
            console.log('真實dom結(jié)構(gòu):' + document.getElementById('app').innerHTML);  
            console.log("%c%s", "color:red","data   : " + this.$data);  
            console.log("%c%s", "color:red","message: " + this.message);
        },
        beforeDestory() {
            console.group('beforeDestroy 銷毀前狀態(tài) ------------>');    
            console.log("%c%s", "color:red","el     : " + this.$el);   
            console.log(this.$el);   
            console.log("%c%s", "color:red","data   : " + this.$data);  
            console.log("%c%s", "color:red","message: " + this.message);
        },
        destroyed() {
             console.group('destroyed 銷毀完成狀態(tài) ------------>');     
             console.log("%c%s", "color:red","el     : " + this.$el);   
             console.log(this.$el);    
             console.log("%c%s", "color:red","data   : " + this.$data);  
             console.log("%c%s", "color:red","message: " + this.message)
        }
})
</script>

<style>
</style>

吧啦吧啦,運行結(jié)果如下


初始化.png

運行中.png

銷毀.png

幾個小問題呢:

1.Vue的父組件和子組件生命周期鉤子函數(shù)執(zhí)行順序
答:Vue 的父組件和子組件生命周期鉤子函數(shù)執(zhí)行順序可以歸類為以下 4 部分:

  • 加載渲染過程
    父 beforeCreate -> 父 created -> 父 beforeMount -> 子 beforeCreate -> 子 created -> 子 beforeMount -> 子 mounted -> 父 mounted
    · 上述為同步引入組件的加載渲染順序毁菱,若為異步引入組件則加載順序如下
    父 beforeCreate -> 父 created -> 父 beforeMount -> 父 mounted -> 子 beforeCreate -> 子 created -> 子 beforeMount -> 子 mounted
    · 同步引入例子:import Page from '@/components/page'
    · 異步引入例子:const Page = () => import('@/components/page')
    或者: const Page = resolve => require(['@/components/page'], page)
  • 子組件更新過程
    父 beforeUpdate -> 子 beforeUpdate -> 子 updated -> 父 updated
  • 父組件更新過程
    父 beforeUpdate -> 父 updated
  • 銷毀過程
    父 beforeDestroy -> 子 beforeDestroy -> 子 destroyed -> 父 destroyed

2.在那個生命周期內(nèi)調(diào)用異步請求
答:可在鉤子函數(shù) created米死,beforeMounted,mounted 中進行贮庞,因為在這三個鉤子函數(shù)之后峦筒,data 已經(jīng)創(chuàng)建,可以將服務(wù)端端返回的數(shù)據(jù)進行賦值窗慎。但是本人推薦在 created 鉤子函數(shù)中調(diào)用異步請求物喷,因為在 created 鉤子函數(shù)中調(diào)用異步請求有以下優(yōu)點
· 能更快獲取到服務(wù)端數(shù)據(jù),減少頁面 loading 時間
· ssr 不支持 beforeMount 遮斥、mounted 鉤子函數(shù)峦失,所以放在 created 中有助于一致性;

3. 在什么階段可以調(diào)用DOM
答: 在鉤子函數(shù) mounted 被調(diào)用前伏伐,Vue 已經(jīng)將編譯好的模板掛載到頁面上宠进,所以在 mounted 中可以訪問操作 DOM。

寫在最后
兄臺藐翎,若本篇文章對你有幫助材蹬,給小弟點個贊呦

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末实幕,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子堤器,更是在濱河造成了極大的恐慌昆庇,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,454評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件闸溃,死亡現(xiàn)場離奇詭異整吆,居然都是意外死亡,警方通過查閱死者的電腦和手機辉川,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評論 3 385
  • 文/潘曉璐 我一進店門表蝙,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人乓旗,你說我怎么就攤上這事府蛇。” “怎么了屿愚?”我有些...
    開封第一講書人閱讀 157,921評論 0 348
  • 文/不壞的土叔 我叫張陵汇跨,是天一觀的道長。 經(jīng)常有香客問我妆距,道長穷遂,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,648評論 1 284
  • 正文 為了忘掉前任娱据,我火速辦了婚禮蚪黑,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘中剩。我一直安慰自己祠锣,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,770評論 6 386
  • 文/花漫 我一把揭開白布咽安。 她就那樣靜靜地躺著,像睡著了一般蓬推。 火紅的嫁衣襯著肌膚如雪刻剥。 梳的紋絲不亂的頭發(fā)上甘苍,一...
    開封第一講書人閱讀 49,950評論 1 291
  • 那天,我揣著相機與錄音,去河邊找鬼逛绵。 笑死,一個胖子當(dāng)著我的面吹牛柠并,可吹牛的內(nèi)容都是我干的弛饭。 我是一名探鬼主播,決...
    沈念sama閱讀 39,090評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼姆另,長吁一口氣:“原來是場噩夢啊……” “哼喇肋!你這毒婦竟也來了坟乾?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,817評論 0 268
  • 序言:老撾萬榮一對情侶失蹤蝶防,失蹤者是張志新(化名)和其女友劉穎甚侣,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體间学,經(jīng)...
    沈念sama閱讀 44,275評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡殷费,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,592評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了低葫。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片详羡。...
    茶點故事閱讀 38,724評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖嘿悬,靈堂內(nèi)的尸體忽然破棺而出实柠,到底是詐尸還是另有隱情,我是刑警寧澤鹊漠,帶...
    沈念sama閱讀 34,409評論 4 333
  • 正文 年R本政府宣布主到,位于F島的核電站,受9級特大地震影響躯概,放射性物質(zhì)發(fā)生泄漏登钥。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 40,052評論 3 316
  • 文/蒙蒙 一娶靡、第九天 我趴在偏房一處隱蔽的房頂上張望牧牢。 院中可真熱鬧,春花似錦姿锭、人聲如沸塔鳍。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,815評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽轮纫。三九已至,卻和暖如春焚鲜,著一層夾襖步出監(jiān)牢的瞬間掌唾,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,043評論 1 266
  • 我被黑心中介騙來泰國打工忿磅, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留糯彬,地道東北人。 一個月前我還...
    沈念sama閱讀 46,503評論 2 361
  • 正文 我出身青樓葱她,卻偏偏與公主長得像撩扒,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子吨些,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,627評論 2 350

推薦閱讀更多精彩內(nèi)容