Vue生命周期

生命周期

生命周期鉤子函數(shù)介紹:

是在生命周期中添加的一些函數(shù)彻舰,這些函數(shù)可以讓開發(fā)者加入自己額外的邏輯糙捺。每個 Vue 實(shí)例在被創(chuàng)建時都要經(jīng)過一系列的初始化過程诫咱。需要設(shè)置數(shù)據(jù)監(jiān)聽、編譯模板洪灯、將實(shí)例掛載到 DOM 并在數(shù)據(jù)變化時更新 DOM 等坎缭。同時在這個過程中也會運(yùn)行一些叫做生命周期鉤子的函數(shù),這給了用戶在不同階段添加自己的代碼的機(jī)會。

演示
先引入vue.js掏呼,可以控制臺查看執(zhí)行順序

<body>
  <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
  <div id="app" v-on:click="modefind">
    {{ message }} {{ count }}次
  </div>
  <script>
    const vm = new Vue({
      el: '#app',
      data: {
        message: '點(diǎn)擊',
        count: 0
      },
      // 初始化階段坏快,Vue的生命周期從創(chuàng)建一個Vue實(shí)例開始,之后Vue要進(jìn)行初始化事件和初始化生命周期哄尔。
      beforeCreate() {
        console.log('before create', this.message) // ! beforeCreate,這個勾子函數(shù)執(zhí)行在初始化之后假消,組件創(chuàng)建之前,還不能訪問數(shù)據(jù)岭接,所有data為空
      }, 
      
      created() {
        console.log('created...', this.message) // ! created,這個勾子函數(shù)執(zhí)行在組件創(chuàng)建完成之后立即調(diào)用,組件有了data對象臼予,所有可以操作data
      },
      
      // 掛載階段鸣戴,
      beforeMount() {
        console.log('before mount', this.$el) // ! vue在掛載前先執(zhí)行beforeMount鉤子函數(shù),這個時候html還沒有創(chuàng)建,data數(shù)據(jù)已經(jīng)存在粘拾,虛擬的dom也已經(jīng)創(chuàng)建
      },

      mounted() {
        console.log('mounted...', this.$el) // ! vm.$el替換舊的el窄锅,切換掉原有的編譯模板。完成頁面的數(shù)據(jù)掛載后執(zhí)行Mounted缰雇,這時可以操作數(shù)據(jù)和DOM了
      },
      // 更新階段
      beforeUpdate() {
        console.log('before update') // ! 當(dāng)數(shù)據(jù)更新之前調(diào)用beforeUpdate鉤子函數(shù)入偷,可以監(jiān)聽數(shù)據(jù),但是不能在這里修改數(shù)據(jù)
      },
      updated() {
        console.log('updated...') // ! 虛擬DOM重新渲染完成后執(zhí)行的鉤子函數(shù)械哟,我們可以獲取到新的數(shù)據(jù)
      },
      // 銷毀階段疏之,
      beforeDestroy() {
        console.log('before destroy') // ! 當(dāng)組件銷毀之前我們還是可以獲取到數(shù)據(jù)的,實(shí)例也完全可用暇咆,
      },
      destroyed() {
        console.log('destroyed...') // ! 當(dāng)組件銷毀完成過后就不能操作DOM锋爪,所有的實(shí)例,子實(shí)例爸业,事件監(jiān)聽器都會被解綁
      },
      methods: {
        modefind() {
          this.count += 1
        }
      }
    })
  </script>
</body>

鉤子函數(shù):

create 階段:

  • beforeCreate():在實(shí)例初始化之后,進(jìn)行數(shù)據(jù)偵聽和事件/偵聽器的配置之前同步調(diào)用其骄。
  • created():在實(shí)例創(chuàng)建完成后被立即同步調(diào)用,這時可以獲取到選項(xiàng)中的 data 數(shù)據(jù)進(jìn)行處理扯旷。

mount 階段:

  • beforeMount():在掛載開始之前被調(diào)用:相關(guān)的 render 函數(shù)首次被調(diào)用拯爽。
  • mounted():實(shí)例被掛載后調(diào)用,這時 el 被新創(chuàng)建的 vm.$el 替換了

update 階段:

  • beforeUpdate():在數(shù)據(jù)發(fā)生改變后钧忽,DOM 被更新之前被調(diào)用毯炮。這里適合在現(xiàn)有 DOM 將要被更新之前訪問它,比如移除手動添加的事件監(jiān)聽器惰瓜。
  • updated():在數(shù)據(jù)更改導(dǎo)致的虛擬 DOM 重新渲染和更新完畢之后被調(diào)用否副。

destroy 階段:

通常在銷毀階段,會銷毀的資源:已啟動的定時器崎坊、未完成的網(wǎng)絡(luò)請求备禀、手動綁定的事件、釋放 socket 連接等...

  • beforeDestroy():實(shí)例銷毀之前調(diào)用。
  • destroyed():實(shí)例銷毀后調(diào)用曲尸。該鉤子被調(diào)用后赋续,對應(yīng) Vue 實(shí)例的所有指令都被解綁,所有的事件監(jiān)聽器被移除另患,所有的子實(shí)例也都被銷毀纽乱。

還有兩個鉤子函數(shù)keep-alive階段

keep-alive 是 Vue 提供的一個組件,用于緩存不活動的組件實(shí)例昆箕,而不是銷毀它們鸦列。

  • activated():被 keep-alive 緩存的組件激活時調(diào)用。
  • deactivated():被 keep-alive 緩存的組件失活時調(diào)用鹏倘。

**errorCaptured : ** 在捕獲一個來自后代組件的錯誤時被調(diào)用薯嗤。

參考:

vue.js官網(wǎng)生命周期介紹

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市纤泵,隨后出現(xiàn)的幾起案子骆姐,更是在濱河造成了極大的恐慌,老刑警劉巖捏题,帶你破解...
    沈念sama閱讀 221,273評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件玻褪,死亡現(xiàn)場離奇詭異,居然都是意外死亡公荧,警方通過查閱死者的電腦和手機(jī)带射,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,349評論 3 398
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來稚矿,“玉大人庸诱,你說我怎么就攤上這事∥畲В” “怎么了桥爽?”我有些...
    開封第一講書人閱讀 167,709評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長昧识。 經(jīng)常有香客問我钠四,道長,這世上最難降的妖魔是什么跪楞? 我笑而不...
    開封第一講書人閱讀 59,520評論 1 296
  • 正文 為了忘掉前任缀去,我火速辦了婚禮,結(jié)果婚禮上甸祭,老公的妹妹穿的比我還像新娘缕碎。我一直安慰自己,他們只是感情好池户,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,515評論 6 397
  • 文/花漫 我一把揭開白布咏雌。 她就那樣靜靜地躺著凡怎,像睡著了一般。 火紅的嫁衣襯著肌膚如雪赊抖。 梳的紋絲不亂的頭發(fā)上统倒,一...
    開封第一講書人閱讀 52,158評論 1 308
  • 那天,我揣著相機(jī)與錄音氛雪,去河邊找鬼房匆。 笑死,一個胖子當(dāng)著我的面吹牛报亩,可吹牛的內(nèi)容都是我干的浴鸿。 我是一名探鬼主播,決...
    沈念sama閱讀 40,755評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼捆昏,長吁一口氣:“原來是場噩夢啊……” “哼赚楚!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起骗卜,我...
    開封第一講書人閱讀 39,660評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎左胞,沒想到半個月后寇仓,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,203評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡烤宙,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,287評論 3 340
  • 正文 我和宋清朗相戀三年遍烦,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片躺枕。...
    茶點(diǎn)故事閱讀 40,427評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡服猪,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出拐云,到底是詐尸還是另有隱情罢猪,我是刑警寧澤,帶...
    沈念sama閱讀 36,122評論 5 349
  • 正文 年R本政府宣布叉瘩,位于F島的核電站膳帕,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏薇缅。R本人自食惡果不足惜危彩,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,801評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望泳桦。 院中可真熱鬧汤徽,春花似錦、人聲如沸灸撰。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,272評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至狱掂,卻和暖如春演痒,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背趋惨。 一陣腳步聲響...
    開封第一講書人閱讀 33,393評論 1 272
  • 我被黑心中介騙來泰國打工鸟顺, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人器虾。 一個月前我還...
    沈念sama閱讀 48,808評論 3 376
  • 正文 我出身青樓讯嫂,卻偏偏與公主長得像,于是被迫代替她去往敵國和親兆沙。 傳聞我的和親對象是個殘疾皇子欧芽,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,440評論 2 359

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

  • 官方圖解 一個vue實(shí)例創(chuàng)建到銷毀的過程 created 在new Vue()后會創(chuàng)建一個vue實(shí)例, 我們每個....
    Shaelyn_閱讀 933評論 0 0
  • 生命周期介紹 每個 Vue 實(shí)例在被創(chuàng)建時都要經(jīng)過一系列的初始化過程——例如,需要設(shè)置數(shù)據(jù)監(jiān)聽葛圃、編譯模板千扔、將實(shí)例掛...
    你不用擔(dān)心閱讀 215評論 0 0
  • 官方圖示 可以看到鉤子函數(shù)包含以下幾種 beforeCreate created beforeMount moun...
    廣告位招租閱讀 2,475評論 0 6
  • Vue實(shí)例有一個完整的生命周期,也就是說從開始創(chuàng)建库正、初始化數(shù)據(jù)曲楚、編譯模板、掛在DOM褥符、渲染-更新-渲染龙誊、卸載等一系...
    Sanyekui閱讀 2,102評論 1 2
  • 1.vue基本生命周期 vue源碼中最終執(zhí)行生命周期函數(shù)都是調(diào)用callHook方法,callHook函數(shù)的邏輯很...
    WHU_GIS_LJ閱讀 19,634評論 0 13