淺析Vue中生命周期函數(shù)的區(qū)別
生命周期圖
上圖生命周期每個(gè)紅色的鉤子是一個(gè)階段,可以在每個(gè)不同的階段寫合適的代碼。
生命周期函數(shù)
生命周期分為四個(gè)對(duì)子,根據(jù)不同的情況使用不同的函數(shù)
其中beforeUpdate、updated能執(zhí)行多次
beforeCreate、created | 創(chuàng)建前、創(chuàng)建后 |
beforeMount、mounted | 掛載前、掛載后 |
beforeUpdate、updated | 更新前、更新后 |
beforeDestroy、destroyed | 銷毀前、銷毀后 |
下面的四種應(yīng)用場(chǎng)景用的統(tǒng)一HTML代碼
<div id="app"> {{myName}} </div>
beforeCreate和created的區(qū)別
創(chuàng)建前、創(chuàng)建后
beforeCreate創(chuàng)建前應(yīng)用場(chǎng)景
vue代碼:
var app = new Vue({ el: '#app', data() { return { myName:'abc', } }, beforeCreate(){ //獲取body并輸出測(cè)試 var bodyDom=document.getElementsByTagName("body")[0].innerHTML; console.log("created",this.myName,bodyDom); } });
瀏覽器輸出結(jié)果:
beforeCreate中data的數(shù)據(jù)是沒有被定義的,created后面是undefined并且{{myName}}還未被識(shí)別
created創(chuàng)建后應(yīng)用場(chǎng)景
vue代碼:
var app = new Vue({ el: '#app', data() { return { myName:'abc', } }, created(){ //獲取body并輸出測(cè)試 var bodyDom=document.getElementsByTagName("body")[0].innerHTML; console.log("created",this.myName,bodyDom); } });
瀏覽器輸出結(jié)果:
created主要做一些頁面的數(shù)據(jù)的數(shù)據(jù)初始化工作,獲取到了myName的值,但是后臺(tái)顯示的還是{{myName}}值還未被填上去
beforeMount和mounted的區(qū)別
掛載前、掛載后
beforeMount掛載前應(yīng)用場(chǎng)景
vue代碼:
var app = new Vue({ el: '#app', data() { return { myName:'abc', } }, beforeMount(){ //獲取body并輸出測(cè)試 var bodyDom=document.getElementsByTagName("body")[0].innerHTML; console.log("beforeMount",this.myName,bodyDom); }, } });
瀏覽器輸出結(jié)果:
輸出結(jié)果和created創(chuàng)建后一樣,是在創(chuàng)建后掛載前,自我感覺沒啥大用
mounted掛載后應(yīng)用場(chǎng)景
vue代碼:
var app = new Vue({ el: '#app', data() { return { myName:'abc', } }, mounted(){ //獲取body并輸出測(cè)試 var bodyDom=document.getElementsByTagName("body")[0].innerHTML; console.log("beforeMount",this.myName,bodyDom); }, } });
瀏覽器輸出結(jié)果:
數(shù)據(jù)已經(jīng)渲染到View中
beforeUpdate和updated的區(qū)別
更新前、更新后;和其他三個(gè)不同可被重復(fù)執(zhí)行
beforeUpdate更新前應(yīng)用場(chǎng)景
vue代碼:
var app = new Vue({ el: '#app', data() { return { myName:'abc', } }, beforeUpdate(){ //獲取body并輸出測(cè)試 var bodyDom=document.getElementsByTagName("body")[0].innerHTML; console.log("beforeMount",this.myName,bodyDom); }, } });
瀏覽器輸出結(jié)果:
數(shù)據(jù)更新前,數(shù)據(jù)未改變
updated更新后應(yīng)用場(chǎng)景
vue代碼:
var app = new Vue({ el: '#app', data() { return { myName:'abc', } }, updated(){ //獲取body并輸出測(cè)試 var bodyDom=document.getElementsByTagName("body")[0].innerHTML; console.log("beforeMount",this.myName,bodyDom); }, } });
瀏覽器輸出結(jié)果:
數(shù)據(jù)更新后,數(shù)據(jù)已改變
beforeDestroy和destroyed的區(qū)別
銷毀前、銷毀后
beforeDestroy銷毀前
一般應(yīng)用到的場(chǎng)景:
- 清除定時(shí)器
- 解綁自定義事件
- 取消訂閱、事件監(jiān)聽
沒有具體代碼演示
destroyed銷毀后
此鉤子函數(shù)會(huì)在組件實(shí)例銷毀之后執(zhí)行,此時(shí)所有的組件包括子組件都被銷毀了。
也沒有具體代碼演示
總結(jié)
幾個(gè)生命周期函數(shù)各有各的特點(diǎn),根據(jù)不同的業(yè)務(wù),使用不同的生命周期函數(shù)來解決問題。
到此這篇關(guān)于淺析Vue中生命周期函數(shù)的區(qū)別的文章就介紹到這了,更多相關(guān)Vue生命周期函數(shù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
使用mint-ui開發(fā)項(xiàng)目的一些心得(分享)
下面小編就為大家?guī)硪黄褂胢int-ui開發(fā)項(xiàng)目的一些心得(分享)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-09-09vue動(dòng)態(tài)菜單、動(dòng)態(tài)路由加載以及刷新踩坑實(shí)戰(zhàn)
這篇文章主要給大家介紹了關(guān)于vue動(dòng)態(tài)菜單、動(dòng)態(tài)路由加載以及刷新踩坑的相關(guān)資料,踩的這些坑其實(shí)是挺常見的,大家可以看看,避免遇到的時(shí)候再踩到同樣的坑,需要的朋友可以參考下2021-10-10Vue表單數(shù)據(jù)修改與刪除功能實(shí)現(xiàn)
本文通過實(shí)例代碼介紹了Vue表單數(shù)據(jù)修改與刪除功能實(shí)現(xiàn),結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友跟隨小編一起看看吧2023-10-10Vue2.x中的父子組件相互通信的實(shí)現(xiàn)方法
這篇文章主要介紹了Vue2.x中的父子組件相互通信,需要的朋友可以參考下2017-05-05詳解vue前后臺(tái)數(shù)據(jù)交互vue-resource文檔
本篇文章主要介紹了vue前后臺(tái)數(shù)據(jù)交互vue-resource文檔,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-07-07vue項(xiàng)目實(shí)例中用query傳參如何實(shí)現(xiàn)跳轉(zhuǎn)效果
這篇文章主要介紹了vue項(xiàng)目實(shí)例中用query傳參如何實(shí)現(xiàn)跳轉(zhuǎn)效果,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-10-10