国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

vue2的生命周期詳解(代碼演示+源碼)

這篇具有很好參考價值的文章主要介紹了vue2的生命周期詳解(代碼演示+源碼)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

一:生命周期的概念

? ? ? ? 生命周期是指從開始創(chuàng)建、初始化數(shù)據(jù)、編譯模版、掛載 Dom -> 渲染、更新 -> 渲染、卸載等一系列過程,我們稱這是 Vue 的生命周期,它主要強調(diào)一個時間段。用一句話來概括就是:

Vue實例的生命周期: 從創(chuàng)建到銷毀的整個過程

二:鉤子函數(shù)

Vue框架內(nèi)置函數(shù),隨著組件的生命周期階段,自動執(zhí)行?

作用:特定的時間點執(zhí)行特定的操作?

三:vue2的生命周期

vue2的生命周期可以用一句話來劃分就是:四大階段,八個方法。

1.初始化階段(Creation)

????????1.beforeCreate:這是生命周期所執(zhí)行的第一個鉤子函數(shù),執(zhí)行于組件實例被創(chuàng)建之初,data 和 methods 中的數(shù)據(jù)還沒有初始化。
????????2.created:在實例創(chuàng)建完成后被調(diào)用,此階段完成了數(shù)據(jù)觀測 (data observer)、屬性和方法的運算,以及 watch/event 事件的設(shè)置。但是此時還沒有掛載到 DOM 上。

? ? ? ? 3.代碼和效果如下:

<template>
  <div>
    <div id="test">{{name}}</div>
  </div>
</template>

<script>
  export default {
    data() {
      return {
        name: '暴怒的代碼'
      }
    },
    beforeCreate() {
      console.log('------------------初始化階段------------------')
      //這里data 和 methods 中的數(shù)據(jù)還沒有初始化,所以輸出的應(yīng)該是undefined
      console.log(`這是beforeCreate的執(zhí)行:${this.name}`)
    },
    created() {
      //這里數(shù)據(jù)已經(jīng)初始化了,可以輸出data中的內(nèi)容
      console.log(`這是Create的執(zhí)行:${this.name}`)
      //因為在created()中還沒有渲染到DOM頁面,所以在渲染前修改,選的數(shù)據(jù)是下面的內(nèi)容
      this.name = '在渲染到DOM之前就修改內(nèi)容'
    }
  }
</script>

?

vue2生命周期,# vue2學(xué)習日常,vue.js,前端,javascript
運行結(jié)果

2.掛載階段(Mounting)

? ? ? ? 1.beforeMount:模板渲染,相關(guān)的 render 函數(shù)首次被調(diào)用,模板已經(jīng)在內(nèi)存中編譯好了,但是尚未掛載到頁面中去。

? ? ? ? 2.mounted:在實例被掛載到 DOM 后調(diào)用,真實DOM生成,此階段完成了模板編譯并且將實例掛載到 DOM 上。

? ? ? ? 3.代碼和效果如下:

<template>
  <div>
    <div id="test">{{name}}</div>
  </div>
</template>

<script>
  export default {
    data() {
      return {
        name: '暴怒的代碼'
      }
    },
    beforeCreate() {
      console.log('------------------初始化階段------------------')
      //這里data 和 methods 中的數(shù)據(jù)還沒有初始化,所以輸出的應(yīng)該是undefined
      console.log(`這是beforeCreate的執(zhí)行:${this.name}`)
    },
    created() {
      //這里數(shù)據(jù)已經(jīng)初始化了,可以輸出data中的內(nèi)容
      console.log(`這是Create的執(zhí)行:${this.name}`)
      //因為在created()中還沒有渲染到DOM頁面,所以在渲染前修改,選的數(shù)據(jù)是下面的內(nèi)容
      this.name = '在渲染到DOM之前就修改內(nèi)容'
    },
    beforeMount() {
      console.log('------------------掛載階段------------------')
      //開始編譯數(shù)據(jù),但是當前數(shù)據(jù)只在內(nèi)存中渲染,并沒有真實的渲染到html頁面上
      console.log(`這是beforeMount的執(zhí)行:${document.getElementById('test').innerText}`)
    },
    mounted() {
      // 獲取到數(shù)據(jù),內(nèi)存中的數(shù)據(jù)真實的掛載到頁面中,Vue實例創(chuàng)建完成
      console.log(`這是mounted的執(zhí)行:${document.getElementById('test').innerText}`)
    }
  }
</script>

?

vue2生命周期,# vue2學(xué)習日常,vue.js,前端,javascript
運行結(jié)果

3.更新階段(Updating)

? ? ? ? 1.beforeUpdate:在數(shù)據(jù)更新之前被調(diào)用,發(fā)生在虛擬 DOM 重新渲染和打補丁之前,此階段頁面中渲染的數(shù)據(jù)還是舊的,但data里的數(shù)據(jù)是最新的,頁面尚未和最新數(shù)據(jù)保持同步。

? ? ? ? 2.updated:在數(shù)據(jù)更新完成后被調(diào)用,實例的 DOM 已經(jīng)更新。

? ? ? ? 3.代碼和效果如下:

<template>
  <div>
    <div id="test">{{name}}</div>
    <el-button @click="name='點擊更新的內(nèi)容'">更新內(nèi)容</el-button>
  </div>
</template>

<script>
  export default {
    data() {
      return {
        name: '暴怒的代碼'
      }
    },
    beforeCreate() {
      console.log('------------------初始化階段------------------')
      //這里data 和 methods 中的數(shù)據(jù)還沒有初始化,所以輸出的應(yīng)該是undefined
      console.log(`這是beforeCreate的執(zhí)行:${this.name}`)
    },
    created() {
      //這里數(shù)據(jù)已經(jīng)初始化了,可以輸出data中的內(nèi)容
      console.log(`這是Create的執(zhí)行:${this.name}`)
      //因為在created()中還沒有渲染到DOM頁面,所以在渲染前修改,選的數(shù)據(jù)是下面的內(nèi)容
      this.name = '在渲染到DOM之前就修改內(nèi)容'
    },
    beforeMount() {
      console.log('------------------掛載階段------------------')
      //開始編譯數(shù)據(jù),但是當前數(shù)據(jù)只在內(nèi)存中渲染,并沒有真實的渲染到html頁面上
      console.log(`這是beforeMount的執(zhí)行:${document.getElementById('test').innerText}`)
    },
    mounted() {
      //獲取到數(shù)據(jù),內(nèi)存中的數(shù)據(jù)真實的掛載到頁面中,Vue實例創(chuàng)建完成
      console.log(`這是mounted的執(zhí)行:${document.getElementById('test').innerText}`)
    },
    beforeUpdate() {
      console.log('------------------更新階段------------------')
      //頁面上的數(shù)據(jù)還是以前的,內(nèi)存中的數(shù)據(jù)是最新的
      console.log(`這是beforeUpdate的執(zhí)行,頁面數(shù)據(jù):${document.getElementById('test').innerText}`)
      console.log(`這是beforeUpdate的執(zhí)行,data數(shù)據(jù):${this.name}`)
    },
    updated() {
      //頁面上的數(shù)據(jù)和內(nèi)存中的數(shù)據(jù)都是最新的
      console.log(`這是updated的執(zhí)行,頁面數(shù)據(jù):${document.getElementById('test').innerText}`)
      console.log(`這是updated的執(zhí)行,data數(shù)據(jù):${this.name}`)
    }
  }
</script>

?

vue2生命周期,# vue2學(xué)習日常,vue.js,前端,javascript
運行結(jié)果

4.銷毀階段(Destruction)

? ? ? ? 1.beforeDestroy:在實例銷毀之前調(diào)用,此時實例仍然完全可用,還沒有真正的執(zhí)行銷毀,vue從運行階段進入到銷毀階段。

? ? ? ? 2.destroyed:在實例銷毀后調(diào)用,此階段完成了實例的事件監(jiān)聽器和子組件的銷毀,vue上所有的實例都不可以用了。

? ? ? ? 3.代碼和效果如下:

<template>
  <div>
    <div id="test">{{name}}</div>
    <el-button @click="name='點擊更新的內(nèi)容'">更新內(nèi)容</el-button>
  </div>
</template>

<script>
  export default {
    data() {
      return {
        name: '暴怒的代碼'
      }
    },
    render(h) {
      return h('div', [
        h('h1', this.name),
        h('button', {
          on: {
            click: () => {
              alert('點擊了我')
            }
          }
        }, 'Click me')
      ]);
    },
    beforeCreate() {
      console.log('------------------初始化階段------------------')
      //這里data 和 methods 中的數(shù)據(jù)還沒有初始化,所以輸出的應(yīng)該是undefined
      console.log(`這是beforeCreate的執(zhí)行:${this.name}`)
    },
    created() {
      //這里數(shù)據(jù)已經(jīng)初始化了,可以輸出data中的內(nèi)容
      console.log(`這是Create的執(zhí)行:${this.name}`)
      //因為在created()中還沒有渲染到DOM頁面,所以在渲染前修改,選的數(shù)據(jù)是下面的內(nèi)容
      this.name = '在渲染到DOM之前就修改內(nèi)容'
    },
    beforeMount() {
      console.log('------------------掛載階段------------------')
      //開始編譯數(shù)據(jù),但是當前數(shù)據(jù)只在內(nèi)存中渲染,并沒有真實的渲染到html頁面上
      console.log(`這是beforeMount的執(zhí)行:${document.getElementById('test').innerText}`)
    },
    mounted() {
      //獲取到數(shù)據(jù),內(nèi)存中的數(shù)據(jù)真實的掛載到頁面中,Vue實例創(chuàng)建完成
      console.log(`這是mounted的執(zhí)行:${document.getElementById('test').innerText}`)
    },
    beforeUpdate() {
      console.log('------------------更新階段------------------')
      //頁面上的數(shù)據(jù)還是以前的,內(nèi)存中的數(shù)據(jù)是最新的
      console.log(`這是beforeUpdate的執(zhí)行,頁面數(shù)據(jù):${document.getElementById('test').innerText}`)
      console.log(`這是beforeUpdate的執(zhí)行,data數(shù)據(jù):${this.name}`)
    },
    updated() {
      //頁面上的數(shù)據(jù)和內(nèi)存中的數(shù)據(jù)都是最新的
      console.log(`這是updated的執(zhí)行,頁面數(shù)據(jù):${document.getElementById('test').innerText}`)
      console.log(`這是updated的執(zhí)行,data數(shù)據(jù):${this.name}`)
    },
    beforeDestroy() {
      console.log('------------------銷毀階段------------------')
      // 仍可以使用data與method方法
      console.log(`這是beforeDestroy的執(zhí)行:${this.name}`)
    },
    destroyed() {
      // 已經(jīng)銷毀data與method方法
      console.log(`這是destroyed的執(zhí)行:${this.name}`)
    },
  }
</script>
vue2生命周期,# vue2學(xué)習日常,vue.js,前端,javascript
運行結(jié)果

?

5.生命周期圖解

vue2生命周期,# vue2學(xué)習日常,vue.js,前端,javascript

6.兩個特殊的生命周期鉤子函數(shù)?

????????vue2中有兩個特殊的生命周期鉤子函數(shù),

  • activated:?keep-alive 組件專屬,組件激活時調(diào)用該函數(shù)。
  • deactivated:keep-alive 組件專屬,組件被銷毀時調(diào)用該函數(shù)。

總結(jié)?

? ? ? ? ?生命周期是vue2中一個很重要的知識點,同時也是面試中容易問到的高頻面試點。熟練掌握了vue2的生命周期,可以讓我們在項目開發(fā)過程中少走很多彎路,減少很多莫名其妙的bug,所以,希望本文能夠?qū)Ω魑恍』锇橛兴鶐椭叮?/p>

另:附上項目的Gitee源碼,地址如下

vue2全家桶練習: 包含vue2下使用router路由跳轉(zhuǎn),vuex狀態(tài)管理,inject注入,minixs混入,watch監(jiān)聽https://gitee.com/qianchen12138/vue2-family-bucket-practice文章來源地址http://www.zghlxwxcb.cn/news/detail-767426.html

到了這里,關(guān)于vue2的生命周期詳解(代碼演示+源碼)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • Vue2基礎(chǔ)四、生命周期

    Vue2基礎(chǔ)四、生命周期

    1、生命周期 Vue生命周期:一個Vue實例從 創(chuàng)建 到 銷毀 的整個過程。 生命周期四個階段:① 創(chuàng)建 ② 掛載 ③ 更新 ④ 銷毀 創(chuàng)建階段:創(chuàng)建響應(yīng)式數(shù)據(jù) 掛載階段:渲染模板 更新階段:修改數(shù)據(jù),更新視圖 銷毀階段:銷毀Vue實例 2、生命周期鉤子 Vue生命周期過程中,會 自動運

    2024年02月15日
    瀏覽(28)
  • 【vue2】vue生命周期的理解

    【vue2】vue生命周期的理解

    ??博???????主: 初映CY的前說(前端領(lǐng)域) ??個人信條: 想要變成得到,中間還有做到! ?? 本文核心 :vue生命周期的介紹、vue生命周期鉤子函數(shù)詳解,vue生命周期的執(zhí)行順序 目錄 一、生命周期介紹 二、生命周期的構(gòu)成 1. 生命周期的四個階段 : 2.八大鉤子作用: 1.bef

    2024年02月02日
    瀏覽(98)
  • vue2面試題:對vue生命周期的理解

    生命周期(life cycle)的概念應(yīng)用很廣泛,在政治、經(jīng)濟、環(huán)境、技術(shù)、社會等諸多領(lǐng)域都會經(jīng)常出現(xiàn),可通俗理解為“從搖籃到墳?zāi)埂钡恼麄€過程,在vue中從實例的創(chuàng)建到銷毀過程就是生命周期,即從創(chuàng)建、初始化數(shù)據(jù)、編譯模板、掛載Dom–渲染、更新–渲染、卸載等一系列

    2024年01月25日
    瀏覽(31)
  • vue2 生命周期,工程化開發(fā)入門

    vue2 生命周期,工程化開發(fā)入門

    1.生命周期 生命周期介紹 生命周期的四個階段 生命周期鉤子 聲明周期案例 2.工程化開發(fā)入門 工程化開發(fā)和腳手架 項目運行流程 組件化 組件注冊 思考:什么時候可以發(fā)送初始化渲染請求?(越早越好)什么時候可以開始操作dom?(至少dom得渲染出來) Vue生命周期:就是一

    2024年02月11日
    瀏覽(91)
  • Vue2 的@hook 、 hook:  與生命周期

    Vue2 的@hook 、 hook: 與生命周期

    優(yōu)點:簡單易上手 缺點:此種方法子組件必須是自己編寫的組件,若引用第三方庫這種方式則不可行 官方文檔并沒有太多相關(guān)解釋,只在處理邊界情況 #程序化的事件偵聽器— Vue.js (vuejs.org)里有出現(xiàn)。 子組件無需相關(guān)處理就能實現(xiàn)偵聽,這塊的實現(xiàn)原理可以從源碼里探究部

    2024年02月05日
    瀏覽(19)
  • Vue2和Vue3生命周期映射關(guān)系及異同

    Vue2和Vue3生命周期映射關(guān)系及異同

    beforeCreate - 使用 setup() created - 使用 use setup() beforeMount -onBeforeMount mounted - onMounted beforeUpdate - onBeforeUpdate updated - onUpdated beforeDestroy- onBeforeUnmount destroyed -onUnmounted activated - onActivated deactivated - onDeactivated errorCaptured - onErrorCaptured beforeCreate - 使用 setup() 函數(shù)替代 Vue 2 中的 beforeCrea

    2024年01月24日
    瀏覽(26)
  • Vue2(生命周期,列表排序,計算屬性和監(jiān)聽器)

    Vue2(生命周期,列表排序,計算屬性和監(jiān)聽器)

    前言 上一章博客我們講解了Vue基礎(chǔ) 這一章我們來講Vue生命周期,列表過濾,計算屬性和監(jiān)聽器 一,生命周期 通常也叫生命周期回調(diào)函數(shù)、生命周期函數(shù)、生命周期鉤子 vue初始化時在不同的階段調(diào)用的不同函數(shù) 生命周期函數(shù)的 this 指向為vue實例,名字不能更改 1.1,生命周期函

    2024年02月13日
    瀏覽(49)
  • Vue2技能樹(3)-聲明式渲染、指令大全、生命周期函數(shù)

    ?? 點贊,你的認可是我創(chuàng)作的動力! ?? 收藏,你的青睞是我努力的方向! ?? 評論,你的意見是我進步的財富! Vue2技能樹(1)-介紹、導(dǎo)入使用、響應(yīng)式數(shù)據(jù)綁定、組件化開發(fā) vue2技能樹(2)-模板語法、vue的工具鏈、漸進式框架 Vue2技能樹(3)-聲明式渲染、指令大全、生命周

    2024年02月07日
    瀏覽(26)
  • #Uniapp:uni-app中vue2生命周期--11個

    uni-app中vue2生命周期 生命周期鉤子 描述 H5 App端 小程序 說明 beforeCreate 在實例初始化之后被調(diào)用 詳情 √ √ √ created 在實例創(chuàng)建完成后被立即調(diào)用 詳情 √ √ √ beforeMount 在掛載開始之前被調(diào)用 詳情 √ √ √ mounted 掛載到實例上去之后調(diào)用 詳情 注意:此處并不能確定子組件

    2024年02月02日
    瀏覽(67)
  • Vue2-收集表單數(shù)據(jù)、過濾器、內(nèi)置指令與自定義指令、Vue生命周期

    Vue2-收集表單數(shù)據(jù)、過濾器、內(nèi)置指令與自定義指令、Vue生命周期

    ??:我徒越萬重山 千帆過 萬木自逢春 更多Vue知識請點擊——Vue.js 1、不同標簽的value屬性 若: input type=\\\"text\\\"/ 普通輸入框,則v-model收集的是value值,用戶輸入的就是value值。 若: input type=\\\"radio\\\"/ 單選框,則v-model收集的是value值,且要給標簽配置value值。 若: input type=\\\"checkb

    2024年02月13日
    瀏覽(55)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包