vue組件的生命周期
組件生命周期的三個階段
詳細解讀vue組件從創(chuàng)建到運行到銷毀的過程
聲明周期的三個階段
BeforeCreate(創(chuàng)建前)
該函數(shù)執(zhí)行在組件創(chuàng)建戚嗅、數(shù)據(jù)觀測 (data observer) 和 event/watcher 事件配置之前够颠,實例初始化之后被調(diào)用略荡。數(shù)據(jù)還沒有初始化
在該階段組件未創(chuàng)建无午,不能訪問數(shù)據(jù),組件中的 data旅掂,ref 均為 undefined悲龟。
Created(創(chuàng)建后)
在組件創(chuàng)建完成后立即調(diào)用
在這一步 實例已經(jīng)完成了數(shù)據(jù)觀測 屬性和方法的運算 watch、event事件回調(diào)
但是還沒有渲染成html模板 組件中的data已經(jīng)存在 可以進行操作了 但是el仍然是undefiend 因為掛載階段還沒有開始又固,$el屬性尚不可用
數(shù)據(jù)已經(jīng)完成了初始化 dom結(jié)構(gòu)未生成
經(jīng)常在它里面 調(diào)用methods中的方法 請求服務器中的數(shù)據(jù) 并且把請求到的數(shù)據(jù) 轉(zhuǎn)存到data中 供template模板渲染使用
BeforeMount(掛載前)
該函數(shù)在掛載之前被調(diào)用仲器,該階段頁面上還沒有渲染,data已經(jīng)初始化完成 ref還不可以操作 render函數(shù)首次被調(diào)用
可以訪問數(shù)據(jù) 編譯模板結(jié)束 虛擬dom已經(jīng)存在
Mounted(掛載后)
該函數(shù)是在組件掛載完成之后執(zhí)行的 這時候el被$el替換仰冠,已經(jīng)可以操作ref了
一般在這個階段請求數(shù)據(jù) filter過濾器也是在這個階段生效
服務器渲染期間不被調(diào)用
如果要操作當前組件的dom 最早 只能在mounted階段執(zhí)行
BeforeUpdate(更新前)
在數(shù)據(jù)更新時調(diào)用乏冀,在虛擬dom更新前,在特殊情況下洋只,可以講更新前的數(shù)據(jù)存起來辆沦,放到之后使用
這里適合在更新前訪問現(xiàn)有的dom比如移除事件監(jiān)聽器
該鉤子只有初次渲染會在服務端進行
data中的數(shù)據(jù)是最新的,且頁面并未和最新的數(shù)據(jù)同步木张。
Updated(更新后)
由于數(shù)據(jù)更改導致的虛擬 DOM 重新渲染和打補丁众辨,在這之后會調(diào)用該鉤子。當這個鉤子被調(diào)用時舷礼,組件 DOM 已經(jīng)更新鹃彻,所以你現(xiàn)在可以執(zhí)行依賴于 DOM 的操作。
頁面也完成了更新妻献,此時蛛株,data數(shù)據(jù)是最新的团赁,同時,頁面上呈現(xiàn)的數(shù)據(jù)也只最新的谨履。
當數(shù)據(jù)變化后 為了能夠操作到最新的dom結(jié)構(gòu) 必須把代碼寫到updated生命周期
BeforeDestroy(銷毀前)
在實例銷毀之前調(diào)用欢摄,這里依然可以操作,可以在這里清除定時器 防止內(nèi)存泄漏
當執(zhí)行該生命周期函數(shù)的時候笋粟,實例身上所有的data怀挠,所有的methods以及過濾器…等都處于可用狀態(tài),并沒有真正執(zhí)行銷毀
Destroyed(銷毀后)
在銷毀后調(diào)用 所有子實例被銷毀 所有的事件監(jiān)聽器會被移除
在服務器渲染期間不被調(diào)用
此時組件以及被完全銷毀害捕,實例中的所有的數(shù)據(jù)绿淋、方法、屬性尝盼、過濾器…等都已經(jīng)不可用了
Activated (激活時)
和上面的beforeDestroy和destroyed用法差不多吞滞,但是如果我們需要一個實例,在銷毀后再次出現(xiàn)的話盾沫,用 beforeDestroy和destroyed的話裁赠,就太浪費性能了。實例被激活時使用赴精,用于重復激活一個實例的時候
被 keep-alive 緩存的組件激活時調(diào)用佩捞。
該鉤子在服務器端渲染期間不被調(diào)用。
Deactivated(停用時)
實例沒有被激活時祖娘。
被 keep-alive 緩存的組件停用時調(diào)用失尖。
該鉤子在服務器端渲染期間不被調(diào)用啊奄。
ErrorCaptured (錯誤調(diào)用時)
當捕獲一個來自子孫組件的錯誤時被調(diào)用渐苏。此鉤子會收到三個參數(shù):錯誤對象、發(fā)生錯誤的組件實例以及一個包含錯誤來源信息的字符串菇夸。此鉤子可以返回 false 以阻止該錯誤繼續(xù)向上傳播琼富。