VUE生命周期全面系統詳解
什麼是生命周期
每個組件在被創建時都要經過一系列的初始化過程——例如,需要設置數據監聽、編譯模板、將實例掛載到 DOM 並在數據變化時更新 DOM 等。同時在這個過程中也會運行一些叫做生命周期鉤子的函數
生命周期的作用
- 創建後發起axax請求
- 掛載後操作dom
- 添加事件監聽
- 銷毀前移除間隔調用,事件監聽
- 說明:並不是每個生命周期都必須使用
vue生命周期有哪些
如下圖(記不住就抄八百遍)
Vue 生命周期總共分為幾個階段
Vue 實例從創建到銷毀的過程,就是生命周期。也就是從開始創建、初始化 數據、編譯模板、掛載 Dom→渲染、更新→渲染、卸載等一系列過程,我們稱這 是 Vue 的生命周期。
創建前後
1)beforeCreate創建前
在實例初始化之後,數據觀測 (data observer) 和 event/watcher 事件配 置之前被調用。
特點: 有this,沒有data,methods,dom節點
beforeCreate() { // 創建前,有this,沒有data,methods,dom節點 console.log("beforeCreate",this.num ,this) },
2)created創建後
在實例創建完成後被立即調用。在這一步,實例已完成以下的配置:數據觀 測 (data observer), 屬性和方法的運算,watch/event 事件回調。然而,掛 載階段還沒開始,$el 屬性目前不可見。
特點:有this,沒有$els,dom節點
用處:發起ajax請求,開啟定時器,監聽事件(window)
created() { // 創建完畢,有data,沒有el console.log("created",this.num ,this.$el) // 作用發起ajax請求,開啟定時器,監聽事件(window) // 開啟定時器 this.stopId = setInterval(() => { this.num++; console.log("滴答") }, 1000) // 監聽事件 window.addEventListener("resize",this.showWin) },
掛載前後
3)beforeMounte掛載前
特點: 有$el,沒有渲染數據
在掛載開始之前被調用:相關的 render 函數首次被調用。
beforeMount() { // dom掛載前,有el,沒有渲染數據 // beforeMount 訪問&el 為什麼是 undefined // 因為使用的腳手架,動態更新造成的(在非腳手架狀態下可以) console.log("beforeMount", this, document.querySelector("#btn")) },
4)mounted掛載後
特點: 有dom節點,數據也渲染
用處: 操作dom節點,發起ajax請求,開啟定時器,監聽事件, el 被新創建的 vm.$el 替換,並掛載到實例上去之後調用該鉤子。如果 root 實例掛載瞭一個文檔內元素,當 mounted 被調用時 vm.$el 也在文檔內。
mounted() { // 掛載完畢 console.log("*mounted", this, document.querySelector("#btn")) // this 當前組件的實例 // this.$el 當前組件的dom節點 // this.num當前組件的 屬性 // console.log(this,this.$el,"組件的實例this",this.num) // 作用:作用發起ajax請求,開啟定時器,監聽事件,操作dom節點 },
更新前後
5)beforeUpdate更新前
特點: 會執行多次,數據更新,dom節點沒有更新
數據更新時調用,發生在虛擬 DOM 打補丁之前。這裡適合在更新之前訪問 現有的 DOM,比如手動移除已添加的事件監聽器。該鉤子在服務器端渲染期間不 被調用,因為隻有初次渲染會在服務端進行。
// 更新前後 beforeUpdate() { // 組件的更新前,數據更新,視圖沒有更新 console.log("beforeUpdate", this.num, document.querySelector("#btn").innerText) },
6)updated更新後
特點: 會執行多次,數據更新,dom節點也更新
由於數據更改導致的虛擬 DOM 重新渲染和打補丁,在這之後會調用該鉤子。
updated() { // 組件更新後,數據更新,視圖已經更新 console.log("updated", this.num, document.querySelector("#btn").innerText) },
銷毀前後
7)beforeDestroy銷毀前
特點: 數據更新,視圖沒有更新
用處:移除事件監聽,停止計時器
實例銷毀之前調用。在這一步,實例仍然完全可用。該鉤子在服務器端渲染 期間不被調用。
// 卸載前後 beforeDestroy() { // 結束定時器 clearInterval(this.stopId); //移除事件監聽 window.removeEventListener("resize", this.showWin) // 數據可以更新,視圖已經不響應 // this.num++; // console.log( "卸載前","beforeDestroy") // alert("卸載前") },
8)destroyed銷毀後
特點: 沒有this,切換視圖與vue實例的聯系
Vue 實例銷毀後調用。調用後,Vue 實例指示的所有東西都會解綁定,所有 的事件監聽器會被移除,所有的子實例也會被銷毀。該鉤子在服務器端渲染期間 不被調用。
destroyed() { // 切斷視圖與vue實例的聯系 // this.num++; console.log("卸載後", "destroyed") }
效果如下:
問題
第一次加載頁面會觸發哪幾個鉤子函數?
當頁面第一次頁面加載時會觸發 beforeCreate, created, beforeMount, mounted 這幾個鉤子函數
到此這篇關於VUE生命周期全面系統詳解的文章就介紹到這瞭,更多相關VUE生命周期內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!