淺談一下Vue技術(shù)棧之生命周期
1、什么是生命周期
- 又名:
生命周期回調(diào)函數(shù)
、生命周期函數(shù)
、生命周期鉤子
。 - 是什么:Vue在關(guān)鍵時刻幫我們調(diào)用的一些
特殊名稱的函數(shù)
。 - 生命周期函數(shù)的名字
不可更
改,但函數(shù)的具體內(nèi)容是程序員根據(jù)需求編寫的
。 - 生命周期函數(shù)中的
this指向
是vm
或組件實例對象
。
2、分析生命周期
2.1 生命周期鉤子函數(shù)
每個Vue實例在創(chuàng)建時都要經(jīng)過一系列的初始化過程。例如,需要設(shè)置數(shù)據(jù)偵聽
、編譯些生命周期鉤子函數(shù)
,給用戶在不同階段添加代碼的機會。
2.2 生命周期鉤子函數(shù)的作用
- 有一些其他鉤子,在實例生命周期的不同階段被調(diào)用,如
mounted
,updated
和destroyed
。 - 生命周期鉤子的
this關(guān)鍵字
上下文指向調(diào)用它的Vue 實例
,調(diào)用方法如this.$e
l。
注:不能使用
箭頭函數(shù)(()=>)
定義一個生命周期方法,如created:()=> this.fetchTodos()
。 這是因為箭頭函數(shù)綁定了父上下文,因此 this與期待的Vue實例不同,this.fechTodos()的行為未定義。
2.3 生命周期鉤子函數(shù)圖例
基本語法:
beforeCreate() { console.log('beforeCreate') }, created() { console.log('created') }, beforeMount() { console.log('beforeMount') }, mounted() { console.log('mounted') }, beforeUpdate() { console.log('beforeUpdate') }, updated() { console.log('updated') }, beforeDestroy() { console.log('beforeDestroy') }, destroyed() { console.log('destroyed') }
語法說明:
Vue 實例有一個完整的生命周期,即 Vue 實例從創(chuàng)建到銷毀的過程。具體可細分為開始 創(chuàng)建、初始化數(shù)據(jù)、編譯模板、掛載 DOM 渲染、更新渲染、卸載等一系列過程,稱為 Vue 的生命周期。在 Vue 的整個生命周期中,提供了一些生命周期鉤子函數(shù),為執(zhí)行自定義邏輯 提供了機會。
beforeCreate
:在實例初始化之后,數(shù)據(jù)觀測和 event/watch 事件配置之前被調(diào)用。created
:實例已經(jīng)創(chuàng)建完成之后被調(diào)用。在這一步,實例已完成以下的配置:數(shù)據(jù)觀測、屬性和方法的運算、event/watch 事件回調(diào)。然而,掛載階段還沒有開始,$el 屬性目前不可見。beforeMount
:在掛載開始之前被調(diào)用,相關(guān)的渲染函數(shù)首次被調(diào)用。在此階段,它檢查是否有任何模板可用于要在 DOM 中呈現(xiàn)的對象:如果沒有找到模板,那么將所定義元素的外部 HTML 視為模板。mounted
:el 被新創(chuàng)建的vm. $el
替換,并掛載到實例上,之后調(diào)用該鉤子。一旦模板準(zhǔn)備就緒,它將數(shù)據(jù)放入模板并創(chuàng)建可呈現(xiàn)元素。beforeUpdate
:數(shù)據(jù)更新時調(diào)用,發(fā)生在虛擬 DOM 重新渲染和打補丁之前。可以在此鉤子中進一步更改狀態(tài),不會觸發(fā)附加的重渲染過程。updated
:由于數(shù)據(jù)更改導(dǎo)致的虛擬 DOM 重新渲染和打補丁,在此之后調(diào)用該鉤子。通過實際更新 DOM 對象并觸發(fā)updated 鉤子,屏幕上的變化得到呈現(xiàn)。beforeDestroy
:實例銷毀之前調(diào)用。在這一步,實例仍然完全可用。在 Vue 對象被破壞并從內(nèi)存中釋放之前,beforeDestroy 鉤子被觸發(fā),并允許在其中處理自定義代碼。destroyed
:Vue 實例銷毀后調(diào)用。調(diào)用后,Vue 實例指示的所有東西都會解綁,所有事件偵聽器會被移除,所有子實例也會被銷毀。該鉤子在服務(wù)器端渲染期間不被調(diào)用。 可以使用生命周期鉤子函數(shù)在 Vue對象生命周期的不同階段添加自定義代碼。它將幫助 設(shè)計人員控制在 DOM 中創(chuàng)建對象的流程,以及更新和刪除對象。
完整生命周期鉤子函數(shù)調(diào)用關(guān)系如下圖所示:
2.4 生命周期鉤子函數(shù)的應(yīng)用
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <script src="https://cdn.jsdelivr.net/npm/vue@2.7.14/dist/vue.js"></script> </head> <body> <div id="root"> <h3>{{information}}</h3> <button @click="changeInformation">改變信息</button> <button @click="destroyVM">銷毀Vue實例</button> </div> <script> new Vue({ el: '#root', data() { return { information: '東方青云歡迎您' } }, methods: { changeInformation() { this.information = '我來了,您在哪里?' }, destroyVM() { this.$destroy()//銷毀Vue實例 } }, beforeCreate() { console.log('=====beforeCreate=====') console.log('el:' + this.$el)//未定義 console.log("data:" + this.$data)//未定義 console.log('=====beforeCreate=====') }, created() { console.log('====created====='); console.log('el:' + this.$el)//未定義 console.log("data:" + this.$data)//已被初始化為[object Object] console.log("information:" + this.information);//information:東方青云歡迎您 console.log('====created====='); }, beforeMount() { console.log('====beforeMount===='); console.log('el:' + this.$el);//el:[object HTMLDivElement] console.log(this.$el);//當(dāng)前掛載元素 document.querySelector('h3').innerText = '1'//無效,虛擬dom }, mounted() { // document.querySelector('h3').innerText = '1'//有效,已轉(zhuǎn)化為真實dom }, beforeUpdate() { console.log('====beforeUpdate===='); console.log(this.information); // debugger;//斷點調(diào)試 }, updated() { console.log(this.information); }, beforeDestroy() { console.log('我要被銷毀了'); }, destroyed() { console.log('銷毀完畢'); }, }) </script> </body> </html>
3、生命周期總結(jié)
常用的生命周期鉤子:
mounted
: 發(fā)送ajax請求、啟動定時器、綁定自定義事件、訂閱消息等【初始化操作】。beforeDestroy
: 清除定時器、解綁自定義事件、取消訂閱消息等【收尾工作】。
關(guān)于銷毀Vue實例:
- 銷毀后借助Vue開發(fā)者工具看不到任何信息。
- 銷毀后
自定義事件會失效
,但原生DOM事件依然有效
。 - 一般不會在beforeDestroy操作數(shù)據(jù),因為即便操作數(shù)據(jù),也
不會再觸發(fā)更新流程
了。
到此這篇關(guān)于淺談一下Vue技術(shù)棧之生命周期的文章就介紹到這了,更多相關(guān)Vue技術(shù)棧的生命周期內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
解決vue更新路由router-view復(fù)用組件內(nèi)容不刷新的問題
今天小編就為大家分享一篇解決vue更新路由router-view復(fù)用組件內(nèi)容不刷新的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-11-11vue+element實現(xiàn)手機號驗證碼注冊的示例
本文主要介紹了vue+element實現(xiàn)手機號驗證碼注冊的示例,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-01-01Vue?warn:Property?"state"?was?accessed?during
這篇文章主要為大家介紹了Vue?warn:Property?"state"?was?accessed?during?render的報錯解決,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-06-06