Vue中created和mounted使用場景分析
一、生命周期概念
通俗地講,生命周期即Vue實例或組件從創(chuàng)建到被消滅的一系列過程,中間的各個節(jié)點被稱為鉤子.vue.js中created方法是一個生命周期鉤子函數(shù),一個vue實例被生成后會調(diào)用這個函數(shù)。一個vue實例被生成后還要綁定到某個html元素上,之后還要進(jìn)行編譯,然后再插入到document中。每一個階段都會有一個鉤子函數(shù),方便開發(fā)者在不同階段處理不同邏輯。一般可以在created函數(shù)中調(diào)用ajax獲取頁面初始化所需的數(shù)據(jù)。

二、瀏覽器渲染過程
要深刻理解生命周期的各個節(jié)點,就必須了解瀏覽器的渲染過程
- 構(gòu)建DOM樹
- 構(gòu)建css規(guī)則樹,根據(jù)執(zhí)行順序解析js文件。
- 構(gòu)建渲染樹Render Tree
- 渲染樹布局layout
- 渲染樹繪制
三、生命周期中的瀏覽器渲染
- created:已創(chuàng)建,在模板渲染成
html前調(diào)用,即通常初始化某些屬性值,然后再渲染成視圖。 - mounted:已掛載,在模板渲染成
html后調(diào)用,通常是初始化頁面完成后,再對html的dom節(jié)點進(jìn)行一些操作。
通常created使用的次數(shù)多,而mounted是在一些插件或組件的使用中進(jìn)行操作,
比如插件chart.js的使用: var ctx = document.getElementById(ID);
通常會有這一步,而如果你寫入組件中,
你會發(fā)現(xiàn)在created中無法對chart進(jìn)行一些初始化配置,
一定要等這個html渲染完后才可以進(jìn)行,那么mounted就是不二之選。
| 生命周期 | 是否獲取dom節(jié)點 | 是否獲取data | 是否獲取methods |
|---|---|---|---|
| beforeCreate | 否 | 否 | 否 |
| created | 否 | 是 | 是 |
| beforeMount | 否 | 是 | 是 |
| mounted | 是 | 是 | 是 |
beforeCreate階段
對瀏覽器來說,整個渲染流程尚未開始或者說準(zhǔn)備開始,對vue來說,實例尚未被初始化,data observer和 event/watcher也還未被調(diào)用,在此階段,對data、methods或文檔節(jié)點的調(diào)用現(xiàn)在無法得到正確的數(shù)據(jù)。
created階段
對瀏覽器來說,渲染整個HTML文檔時,dom節(jié)點、css規(guī)則樹與js文件被解析后,但是沒有進(jìn)入被瀏覽器render過程,上述資源是尚未掛載在頁面上,也就是在vue生命周期中對應(yīng)的created階段,實例已經(jīng)被初始化,但是還沒有掛載至 $el上,所以我們無法獲取到對應(yīng)的節(jié)點,但是此時我們是可以獲取到vue中data與methods中的數(shù)據(jù)的
beforeMount階段
實際上與created階段類似,節(jié)點尚未掛載,但是依舊可以獲取到data與methods中的數(shù)據(jù)。
mounted階段
對瀏覽器來說,已經(jīng)完成了dom與css規(guī)則樹的render,并完成對render tree進(jìn)行了布局,而瀏覽器收到這一指令,調(diào)用渲染器的paint()在屏幕上顯示,而對于vue來說,在mounted階段,vue的template成功掛載在$el中,此時一個完整的頁面已經(jīng)能夠顯示在瀏覽器中,所以在這個階段,即可以調(diào)用節(jié)點了(關(guān)于這一點,在筆者測試中,在mounted方法中打斷點然后run,依舊能夠在瀏覽器中看到整體的頁面)。
四、使用場景
通過瀏覽器的渲染過程,可以總結(jié)出created和mounted的使用場景
created:通常用于初始化某些屬性值,例如data中的數(shù)據(jù),然后再渲染成視圖。
mounted:通常在初始化頁面完成后,對html的dom節(jié)點進(jìn)行需要的操作。
因此,在created中,是無法進(jìn)行DOM操作的,而mounted可以獲取渲染出來的所有屬性值。
五、常見相關(guān)問題
一些頁面跳轉(zhuǎn)后, 一些基礎(chǔ)數(shù)據(jù)接口沒有重新請求
舉個簡單的例子
created(){
this.init();
},
mounted() {
this.init();
},
methods: {
init() {
this.getList();
this.getdetailById();
this.getFicts();
}
},
}到此這篇關(guān)于Vue中created和mounted詳解的文章就介紹到這了,更多相關(guān)Vue中created和mounted內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
詳解Jest結(jié)合Vue-test-utils使用的初步實踐
這篇文章主要介紹了詳解Jest結(jié)合Vue-test-utils使用的初步實踐,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-06-06
vue-class-setup?編寫?class?風(fēng)格組合式API
這篇文章主要為大家介紹了vue-class-setup?編寫?class?風(fēng)格組合式API,支持Vue2和Vue3,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-09-09
56個實用的JavaScript 工具函數(shù)助你提升開發(fā)效率
今天來看看JavaScript中的一些實用的工具函數(shù),希望能幫助你提高開發(fā)效率!需要的朋友可以參考下面文章的具體內(nèi)容2021-10-10

