VUE生命周期全面系統(tǒng)詳解
什么是生命周期
每個組件在被創(chuàng)建時都要經過一系列的初始化過程——例如,需要設置數(shù)據(jù)監(jiān)聽、編譯模板、將實例掛載到 DOM 并在數(shù)據(jù)變化時更新 DOM 等。同時在這個過程中也會運行一些叫做生命周期鉤子的函數(shù)
生命周期的作用
- 創(chuàng)建后發(fā)起axax請求
- 掛載后操作dom
- 添加事件監(jiān)聽
- 銷毀前移除間隔調用,事件監(jiān)聽
- 說明:并不是每個生命周期都必須使用
vue生命周期有哪些
如下圖(記不住就抄八百遍)
Vue 生命周期總共分為幾個階段
Vue 實例從創(chuàng)建到銷毀的過程,就是生命周期。也就是從開始創(chuàng)建、初始化 數(shù)據(jù)、編譯模板、掛載 Dom→渲染、更新→渲染、卸載等一系列過程,我們稱這 是 Vue 的生命周期。
創(chuàng)建前后
1)beforeCreate創(chuàng)建前
在實例初始化之后,數(shù)據(jù)觀測 (data observer) 和 event/watcher 事件配 置之前被調用。
特點: 有this,沒有data,methods,dom節(jié)點
beforeCreate() { // 創(chuàng)建前,有this,沒有data,methods,dom節(jié)點 console.log("beforeCreate",this.num ,this) },
2)created創(chuàng)建后
在實例創(chuàng)建完成后被立即調用。在這一步,實例已完成以下的配置:數(shù)據(jù)觀 測 (data observer), 屬性和方法的運算,watch/event 事件回調。然而,掛 載階段還沒開始,$el 屬性目前不可見。
特點:有this,沒有$els,dom節(jié)點
用處:發(fā)起ajax請求,開啟定時器,監(jiān)聽事件(window)
created() { // 創(chuàng)建完畢,有data,沒有el console.log("created",this.num ,this.$el) // 作用發(fā)起ajax請求,開啟定時器,監(jiān)聽事件(window) // 開啟定時器 this.stopId = setInterval(() => { this.num++; console.log("滴答") }, 1000) // 監(jiān)聽事件 window.addEventListener("resize",this.showWin) },
掛載前后
3)beforeMounte掛載前
特點: 有$el,沒有渲染數(shù)據(jù)
在掛載開始之前被調用:相關的 render 函數(shù)首次被調用。
beforeMount() { // dom掛載前,有el,沒有渲染數(shù)據(jù) // beforeMount 訪問&el 為什么是 undefined // 因為使用的腳手架,動態(tài)更新造成的(在非腳手架狀態(tài)下可以) console.log("beforeMount", this, document.querySelector("#btn")) },
4)mounted掛載后
特點: 有dom節(jié)點,數(shù)據(jù)也渲染
用處: 操作dom節(jié)點,發(fā)起ajax請求,開啟定時器,監(jiān)聽事件, el 被新創(chuàng)建的 vm.$el 替換,并掛載到實例上去之后調用該鉤子。如果 root 實例掛載了一個文檔內元素,當 mounted 被調用時 vm.$el 也在文檔內。
mounted() { // 掛載完畢 console.log("*mounted", this, document.querySelector("#btn")) // this 當前組件的實例 // this.$el 當前組件的dom節(jié)點 // this.num當前組件的 屬性 // console.log(this,this.$el,"組件的實例this",this.num) // 作用:作用發(fā)起ajax請求,開啟定時器,監(jiān)聽事件,操作dom節(jié)點 },
更新前后
5)beforeUpdate更新前
特點: 會執(zhí)行多次,數(shù)據(jù)更新,dom節(jié)點沒有更新
數(shù)據(jù)更新時調用,發(fā)生在虛擬 DOM 打補丁之前。這里適合在更新之前訪問 現(xiàn)有的 DOM,比如手動移除已添加的事件監(jiān)聽器。該鉤子在服務器端渲染期間不 被調用,因為只有初次渲染會在服務端進行。
// 更新前后 beforeUpdate() { // 組件的更新前,數(shù)據(jù)更新,視圖沒有更新 console.log("beforeUpdate", this.num, document.querySelector("#btn").innerText) },
6)updated更新后
特點: 會執(zhí)行多次,數(shù)據(jù)更新,dom節(jié)點也更新
由于數(shù)據(jù)更改導致的虛擬 DOM 重新渲染和打補丁,在這之后會調用該鉤子。
updated() { // 組件更新后,數(shù)據(jù)更新,視圖已經更新 console.log("updated", this.num, document.querySelector("#btn").innerText) },
銷毀前后
7)beforeDestroy銷毀前
特點: 數(shù)據(jù)更新,視圖沒有更新
用處:移除事件監(jiān)聽,停止計時器
實例銷毀之前調用。在這一步,實例仍然完全可用。該鉤子在服務器端渲染 期間不被調用。
// 卸載前后 beforeDestroy() { // 結束定時器 clearInterval(this.stopId); //移除事件監(jiān)聽 window.removeEventListener("resize", this.showWin) // 數(shù)據(jù)可以更新,視圖已經不響應 // this.num++; // console.log( "卸載前","beforeDestroy") // alert("卸載前") },
8)destroyed銷毀后
特點: 沒有this,切換視圖與vue實例的聯(lián)系
Vue 實例銷毀后調用。調用后,Vue 實例指示的所有東西都會解綁定,所有 的事件監(jiān)聽器會被移除,所有的子實例也會被銷毀。該鉤子在服務器端渲染期間 不被調用。
destroyed() { // 切斷視圖與vue實例的聯(lián)系 // this.num++; console.log("卸載后", "destroyed") }
效果如下:
問題
第一次加載頁面會觸發(fā)哪幾個鉤子函數(shù)?
當頁面第一次頁面加載時會觸發(fā) beforeCreate, created, beforeMount, mounted 這幾個鉤子函數(shù)
到此這篇關于VUE生命周期全面系統(tǒng)詳解的文章就介紹到這了,更多相關VUE生命周期內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
elementui?el-select?change事件傳參問題
這篇文章主要介紹了elementui?el-select?change事件傳參問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-01-01Vue?Electron實現(xiàn)輸入法自動刷字數(shù)功能詳解
這篇文章主要介紹了Vue?Electron實現(xiàn)輸入法自動刷字數(shù)功能,文中的示例代碼講解詳細,對我們學習C#有一定的幫助,感興趣的小伙伴可以跟隨小編一起了解一下2022-12-12Vue+UpLoad實現(xiàn)上傳預覽和刪除圖片的實踐
本文主要介紹了Vue+UpLoad實現(xiàn)上傳預覽和刪除圖片的實踐,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-02-02