欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

淺談一下Vue技術(shù)棧之生命周期

 更新時(shí)間:2023年05月05日 11:23:14   作者:東方青云、  
這篇文章主要介紹了淺談一下Vue技術(shù)棧之生命周期,每一個(gè)vue實(shí)例從創(chuàng)建到銷毀的過程,就是這個(gè)vue實(shí)例的生命周期,這些過程中會(huì)伴隨著一些函數(shù)的自調(diào)用,需要的朋友可以參考下

1、什么是生命周期

  • 又名:生命周期回調(diào)函數(shù)生命周期函數(shù)、生命周期鉤子。
  • 是什么:Vue在關(guān)鍵時(shí)刻幫我們調(diào)用的一些特殊名稱的函數(shù)。
  • 生命周期函數(shù)的名字不可更改,但函數(shù)的具體內(nèi)容是程序員根據(jù)需求編寫的。
  • 生命周期函數(shù)中的this指向vm 或 組件實(shí)例對(duì)象

2、分析生命周期

2.1 生命周期鉤子函數(shù)

每個(gè)Vue實(shí)例在創(chuàng)建時(shí)都要經(jīng)過一系列的初始化過程。例如,需要設(shè)置數(shù)據(jù)偵聽、編譯些生命周期鉤子函數(shù),給用戶在不同階段添加代碼的機(jī)會(huì)。

2.2 生命周期鉤子函數(shù)的作用

  • 有一些其他鉤子,在實(shí)例生命周期的不同階段被調(diào)用,如 mountedupdated 和 destroyed
  • 生命周期鉤子的 this關(guān)鍵字上下文指向調(diào)用它的 Vue 實(shí)例,調(diào)用方法如 this.$el。

注:不能使用箭頭函數(shù)(()=>)定義一個(gè)生命周期方法,如created:()=> this.fetchTodos()。 這是因?yàn)榧^函數(shù)綁定了父上下文,因此 this與期待的Vue實(shí)例不同,this.fechTodos()的行為未定義。

2.3 生命周期鉤子函數(shù)圖例

請(qǐng)?zhí)砑訄D片描述

基本語法:

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 實(shí)例有一個(gè)完整的生命周期,即 Vue 實(shí)例從創(chuàng)建到銷毀的過程。具體可細(xì)分為開始 創(chuàng)建、初始化數(shù)據(jù)、編譯模板、掛載 DOM 渲染、更新渲染、卸載等一系列過程,稱為 Vue 的生命周期。在 Vue 的整個(gè)生命周期中,提供了一些生命周期鉤子函數(shù),為執(zhí)行自定義邏輯 提供了機(jī)會(huì)。

  1. beforeCreate:在實(shí)例初始化之后,數(shù)據(jù)觀測(cè)和 event/watch 事件配置之前被調(diào)用。
  2. created:實(shí)例已經(jīng)創(chuàng)建完成之后被調(diào)用。在這一步,實(shí)例已完成以下的配置:數(shù)據(jù)觀測(cè)、屬性和方法的運(yùn)算、event/watch 事件回調(diào)。然而,掛載階段還沒有開始,$el 屬性目前不可見。
  3. beforeMount:在掛載開始之前被調(diào)用,相關(guān)的渲染函數(shù)首次被調(diào)用。在此階段,它檢查是否有任何模板可用于要在 DOM 中呈現(xiàn)的對(duì)象:如果沒有找到模板,那么將所定義元素的外部 HTML 視為模板。
  4. mounted:el 被新創(chuàng)建的 vm. $el 替換,并掛載到實(shí)例上,之后調(diào)用該鉤子。一旦模板準(zhǔn)備就緒,它將數(shù)據(jù)放入模板并創(chuàng)建可呈現(xiàn)元素。
  5. beforeUpdate:數(shù)據(jù)更新時(shí)調(diào)用,發(fā)生在虛擬 DOM 重新渲染和打補(bǔ)丁之前??梢栽诖算^子中進(jìn)一步更改狀態(tài),不會(huì)觸發(fā)附加的重渲染過程。
  6. updated:由于數(shù)據(jù)更改導(dǎo)致的虛擬 DOM 重新渲染和打補(bǔ)丁,在此之后調(diào)用該鉤子。通過實(shí)際更新 DOM 對(duì)象并觸發(fā)updated 鉤子,屏幕上的變化得到呈現(xiàn)。
  7. beforeDestroy:實(shí)例銷毀之前調(diào)用。在這一步,實(shí)例仍然完全可用。在 Vue 對(duì)象被破壞并從內(nèi)存中釋放之前,beforeDestroy 鉤子被觸發(fā),并允許在其中處理自定義代碼。
  8. destroyed:Vue 實(shí)例銷毀后調(diào)用。調(diào)用后,Vue 實(shí)例指示的所有東西都會(huì)解綁,所有事件偵聽器會(huì)被移除,所有子實(shí)例也會(huì)被銷毀。該鉤子在服務(wù)器端渲染期間不被調(diào)用。 可以使用生命周期鉤子函數(shù)在 Vue對(duì)象生命周期的不同階段添加自定義代碼。它將幫助 設(shè)計(jì)人員控制在 DOM 中創(chuàng)建對(duì)象的流程,以及更新和刪除對(duì)象。

完整生命周期鉤子函數(shù)調(diào)用關(guān)系如下圖所示:

請(qǐng)?zhí)砑訄D片描述

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實(shí)例</button>
    </div>
    <script>
        new Vue({
            el: '#root',
            data() {
                return {
                    information: '東方青云歡迎您'
                }
            },
            methods: {
                changeInformation() {
                    this.information = '我來了,您在哪里?'
                },
                destroyVM() {
                    this.$destroy()//銷毀Vue實(shí)例
                }
            },
            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)化為真實(shí)dom
            },
            beforeUpdate() {
                console.log('====beforeUpdate====');
                console.log(this.information);
                // debugger;//斷點(diǎn)調(diào)試
            },
            updated() {
                console.log(this.information);
            },
            beforeDestroy() {
                console.log('我要被銷毀了');
            },
            destroyed() {
                console.log('銷毀完畢');
            },
        })
    </script>
</body>
</html>

3、生命周期總結(jié)

常用的生命周期鉤子:

  • mounted: 發(fā)送ajax請(qǐng)求、啟動(dòng)定時(shí)器、綁定自定義事件、訂閱消息等【初始化操作】。
  • beforeDestroy: 清除定時(shí)器、解綁自定義事件、取消訂閱消息等【收尾工作】。

關(guān)于銷毀Vue實(shí)例:

  • 銷毀后借助Vue開發(fā)者工具看不到任何信息。
  • 銷毀后自定義事件會(huì)失效,但原生DOM事件依然有效。
  • 一般不會(huì)在beforeDestroy操作數(shù)據(jù),因?yàn)榧幢悴僮鲾?shù)據(jù),也不會(huì)再觸發(fā)更新流程了。

到此這篇關(guān)于淺談一下Vue技術(shù)棧之生命周期的文章就介紹到這了,更多相關(guān)Vue技術(shù)棧的生命周期內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 解決vue更新路由router-view復(fù)用組件內(nèi)容不刷新的問題

    解決vue更新路由router-view復(fù)用組件內(nèi)容不刷新的問題

    今天小編就為大家分享一篇解決vue更新路由router-view復(fù)用組件內(nèi)容不刷新的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-11-11
  • 一篇Vue、React重點(diǎn)詳解大全

    一篇Vue、React重點(diǎn)詳解大全

    這篇文章主要介紹了一篇Vue、React重點(diǎn)詳解大全,文章內(nèi)容詳細(xì),通過案例可以更好的理解其相關(guān)知識(shí),需要的朋友可以參考下
    2023-01-01
  • 使用Elemen加上lang=“ts“后編譯報(bào)錯(cuò)

    使用Elemen加上lang=“ts“后編譯報(bào)錯(cuò)

    本文主要介紹了使用Elemen加上lang=“ts“后編譯報(bào)錯(cuò),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • vue中,在本地緩存中讀寫數(shù)據(jù)的方法

    vue中,在本地緩存中讀寫數(shù)據(jù)的方法

    今天小編就為大家分享一篇vue中,在本地緩存中讀寫數(shù)據(jù)的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-09-09
  • vue+element實(shí)現(xiàn)手機(jī)號(hào)驗(yàn)證碼注冊(cè)的示例

    vue+element實(shí)現(xiàn)手機(jī)號(hào)驗(yàn)證碼注冊(cè)的示例

    本文主要介紹了vue+element實(shí)現(xiàn)手機(jī)號(hào)驗(yàn)證碼注冊(cè)的示例,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • javaScript與vue獲取元素的方法代碼示例

    javaScript與vue獲取元素的方法代碼示例

    在開發(fā)中我們可能會(huì)遇到這樣的問題,文本框聚焦、元素點(diǎn)擊等,所以下面這篇文章主要給大家介紹了關(guān)于javaScript與vue獲取元素的相關(guān)資料,需要的朋友可以參考下
    2023-10-10
  • Vue?warn:Property?"state"?was?accessed?during?render解決

    Vue?warn:Property?"state"?was?accessed?during

    這篇文章主要為大家介紹了Vue?warn:Property?"state"?was?accessed?during?render的報(bào)錯(cuò)解決,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-06-06
  • vue中拆分組件的實(shí)戰(zhàn)案例

    vue中拆分組件的實(shí)戰(zhàn)案例

    最近在學(xué)vue,試著寫個(gè)單頁應(yīng)用,在寫組件,拆分組件時(shí)遇到一些困惑,下面這篇文章主要給大家介紹了關(guān)于vue中拆分組件的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-12-12
  • vue fetch中的.then()的正確使用方法

    vue fetch中的.then()的正確使用方法

    這篇文章主要介紹了vue fetch中的.then()的正確使用方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • Element-ui upload上傳文件限制的解決方法

    Element-ui upload上傳文件限制的解決方法

    這篇文章主要介紹了Element-ui upload上傳文件限制的解決方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01

最新評(píng)論