亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

vue的生命周期鉤子與父子組件的生命周期詳解

 更新時(shí)間:2022年08月04日 09:57:09   作者:Celester_best  
Vue的生命周期就是vue實(shí)例從創(chuàng)建到銷毀的全過(guò)程,也就是new Vue() 開(kāi)始就是vue生命周期的開(kāi)始。Vue 實(shí)例有?個(gè)完整的?命周期,也就是從開(kāi)始創(chuàng)建、初始化數(shù)據(jù)、編譯模版、掛載Dom -> 渲染、更新 -> 渲染、卸載 等?系列過(guò)程,稱這是Vue的?命周期

vue的生命周期鉤子的介紹

vue官網(wǎng)中提供的vue的生命周期鉤子圖

vue的生命周期可以分為8個(gè)階段:

1、創(chuàng)建vue實(shí)例涉及的兩個(gè)鉤子

(1)beforeCreate:創(chuàng)建前,vue實(shí)例初始化之前調(diào)用。

此時(shí)的數(shù)據(jù)觀察和事件配置都還沒(méi)有準(zhǔn)備好,而此時(shí)的實(shí)例中的data和el還是underfined狀態(tài),不可用的。Dom元素也未加載,此時(shí)還不能操作dom元素

(2)created:創(chuàng)建后,vue實(shí)例初始化之后調(diào)用

此時(shí)實(shí)例創(chuàng)建完成,可以訪問(wèn)data、mothods等屬性。但是此時(shí)組件還沒(méi)有掛載到頁(yè)面上,所以依然不能訪問(wèn)dom元素。此階段可以進(jìn)行一個(gè)數(shù)據(jù)請(qǐng)求的操作。

2、組件掛載到頁(yè)面涉及的兩個(gè)鉤子:

(1)beforeMount:掛載前,掛載到DOM樹(shù)之前調(diào)用。相關(guān)的 render 函數(shù)首次被調(diào)用。

在beforeMount之前,會(huì)找到對(duì)應(yīng)的template,并編譯成render函數(shù)。

(2)mounted:掛載后,掛載到DOM樹(shù)之后調(diào)用

此時(shí)可以通過(guò)Dom API操作DOM元素

3、組件更新涉及的兩個(gè)鉤子

(1)beforeupdate:更新前,在數(shù)據(jù)發(fā)生改變后,DOM 被更新之前被調(diào)用。

此時(shí),可以對(duì)可能會(huì)被移除的元素做一些操作,比如移除事件監(jiān)聽(tīng)等

(2)updated:更新后,在數(shù)據(jù)更改導(dǎo)致的虛擬 DOM 重新渲染和更新完畢之后被調(diào)用

此時(shí),組件 DOM 已經(jīng)更新。

4、組件銷毀涉及的兩個(gè)鉤子

(1)beforeDestroy:銷毀前,vue實(shí)例銷毀之前調(diào)用

一般在這一步,可以銷毀定時(shí)器,解綁全局事件等。

(2)destroyed:銷毀后,vue實(shí)例銷毀之后調(diào)用

該鉤子被調(diào)用后,對(duì)應(yīng) Vue 實(shí)例的所有指令都被解綁,所有的事件監(jiān)聽(tīng)器被移除,所有的子實(shí)例也都被銷毀。

值得注意的是,在使用keep-alive時(shí),組件還會(huì)涉及兩外兩個(gè)鉤子

(1)actived:被 keep-alive 緩存的組件激活時(shí)調(diào)用。

(2)被 keep-alive 緩存的組件失活時(shí)調(diào)用。

父子組件的生命周期

加載渲染過(guò)程

父beforeCreate→父created→父beforeMount→子bereforeCreate→子created→子beforeMound→子mounted→父mounted

父組件更新過(guò)程

點(diǎn)擊“父組件更新”按鈕

執(zhí)行的生命周期鉤子:父beforeUpdate→父updated

子組件更新過(guò)程

點(diǎn)擊‘子組件更新’按鈕:

執(zhí)行的生命周期鉤子:子befforeUpdate→子updated

父子組件更新過(guò)程

點(diǎn)擊‘改變value’按鈕

執(zhí)行的生命周期鉤子:父beforeUpdate→子beforeUpdate→子updated→父updated

銷毀過(guò)程

銷毀是執(zhí)行的生命周期鉤子:父beforeDestroy→子beforeDestroy→子destroyed→父destroyed

代碼示例

Lifecycle.vue

<template>
  <div>
    Lifecycle
    <button @click="changeValue">改變value</button>
    <br />
    <br />
    <br />
    <parent :value="value"></parent>
  </div>
</template>
<script>
import Parent from "./Parent.vue";
export default {
  name: "Lifecycle",
  components: { Parent },
  data() {
    return {
      value: 0,
    };
  },
  methods: {
    changeValue() {
      this.value++;
    },
  },
};
</script>

Parent.vue

<template>
  <div>
    <p>Parent-{{ parentData }}</p>
    <p>Parent-value:{{ value }}</p>
 
    <button @click="changeParentData">父組件更新</button>
    <br />
    <br />
    <br />
    <Child :value="value"></Child>
  </div>
</template>
<script>
import Child from "./Child.vue";
export default {
  name: "Parent",
  props: ["value"],
  components: { Child },
  data() {
    return {
      parentData: 0,
    };
  },
  methods: {
    changeParentData() {
      this.parentData++;
    },
  },
  // 創(chuàng)建vue實(shí)例前
  beforeCreate() {
    console.log("parent beforeCreate 方法執(zhí)行了");
  },
  // 創(chuàng)建vue實(shí)例后
  created() {
    console.log("parent created 方法執(zhí)行了");
  },
  // 掛載前
  beforeMount() {
    console.log("parent beforeMount 方法執(zhí)行了");
  },
  // 掛載后
  mounted() {
    console.log("parent mounted 方法執(zhí)行了");
  },
  // 更新前
  beforeUpdate() {
    console.log("parent beforeUpdate 方法執(zhí)行了");
  },
  // 更新后
  updated() {
    console.log("parent updated 方法執(zhí)行了");
  },
  // 銷毀前
  beforeDestroy() {
    console.log("parent beforeDestroy 方法執(zhí)行了");
  },
  // 銷毀后
  destroyed() {
    console.log("parent destroyed 方法執(zhí)行了");
  },
};
</script>

child.vue

<template>
  <div>
    <p>Child-{{ childData }}</p>
    <p>Child-value:{{ value }}</p>
    <button @click="changeChildData">子組件更新</button>
  </div>
</template>
<script>
export default {
  name: "Child",
  props: ["value"],
  data() {
    return {
      childData: 0,
    };
  },
  methods: {
    changeChildData() {
      this.childData++;
    },
  },
  // 創(chuàng)建vue實(shí)例前
  beforeCreate() {
    console.log("Child beforeCreate 方法執(zhí)行了");
  },
  // 創(chuàng)建vue實(shí)例后
  created() {
    console.log("Child created 方法執(zhí)行了");
  },
  // 掛載前
  beforeMount() {
    console.log("Child beforeMount 方法執(zhí)行了");
  },
  // 掛載后
  mounted() {
    console.log("Child mounted 方法執(zhí)行了");
  },
  // 更新前
  beforeUpdate() {
    console.log("Child beforeUpdate 方法執(zhí)行了");
  },
  // 更新后
  updated() {
    console.log("Child updated 方法執(zhí)行了");
  },
  // 銷毀前
  beforeDestroy() {
    console.log("Child beforeDestroy 方法執(zhí)行了");
  },
  // 銷毀后
  destroyed() {
    console.log("Child destroyed 方法執(zhí)行了");
  },
};
</script>

created和mounted的區(qū)別

created創(chuàng)建vue實(shí)例之后,此時(shí)完成了數(shù)據(jù)檢測(cè)和事件及配置,可以訪問(wèn)data數(shù)據(jù),可以進(jìn)行網(wǎng)絡(luò)請(qǐng)求。created是在模板渲染成html前調(diào)用,所以不能進(jìn)行dom操作

mounted是組件掛載完畢,模板渲染成html之后調(diào)用,可以進(jìn)行dom相關(guān)的操作。

到此這篇關(guān)于vue的生命周期鉤子與父子組件的生命周期詳解的文章就介紹到這了,更多相關(guān)vue生命周期內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Vue中的數(shù)據(jù)驅(qū)動(dòng)解釋

    Vue中的數(shù)據(jù)驅(qū)動(dòng)解釋

    這篇文章主要為大家介紹了Vue中的數(shù)據(jù)驅(qū)動(dòng)解釋,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12
  • 分享Vue子組件接收父組件傳值的3種方式

    分享Vue子組件接收父組件傳值的3種方式

    這篇文章主要給大家分享的是Vue子組件接收父組件傳值的3種方式,主要通過(guò)聲明接收、接收數(shù)據(jù)的同時(shí)進(jìn)行?類型限制、接收數(shù)據(jù)的同時(shí)對(duì)?數(shù)據(jù)類型、必要性、默認(rèn)值?進(jìn)行限制相關(guān)內(nèi)容展開(kāi)更多詳細(xì)的相關(guān)資料,需要的小伙伴可以參考一下
    2022-03-03
  • 使用provide/inject實(shí)現(xiàn)跨組件通信的方法

    使用provide/inject實(shí)現(xiàn)跨組件通信的方法

    在 Vue 應(yīng)用中,組件間通信是構(gòu)建復(fù)雜應(yīng)用時(shí)的一個(gè)常見(jiàn)需求,Vue3.x 提供了provide和inject API,讓跨組件通信變得更加簡(jiǎn)潔和高效,本文將深入探討如何使用provide和inject在Vue3.x中實(shí)現(xiàn)跨組件通信,并通過(guò)示例代碼一步步進(jìn)行說(shuō)明,需要的朋友可以參考下
    2024-03-03
  • 在vue中created、mounted等方法使用小結(jié)

    在vue中created、mounted等方法使用小結(jié)

    這篇文章主要介紹了在vue中created、mounted等方法使用小結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-07-07
  • VueX安裝及使用基礎(chǔ)教程

    VueX安裝及使用基礎(chǔ)教程

    這篇文章介紹了VueX安裝及使用基礎(chǔ)教程,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-01-01
  • Vue3+X6流程圖實(shí)現(xiàn)數(shù)據(jù)雙向綁定詳解

    Vue3+X6流程圖實(shí)現(xiàn)數(shù)據(jù)雙向綁定詳解

    這篇文章主要為大家詳細(xì)介紹了Vue3如何結(jié)合X6流程圖實(shí)現(xiàn)數(shù)據(jù)雙向綁定,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-03-03
  • 如何使用el-table+el-tree+el-select動(dòng)態(tài)選擇對(duì)應(yīng)值

    如何使用el-table+el-tree+el-select動(dòng)態(tài)選擇對(duì)應(yīng)值

    小編在做需求時(shí),遇到了在el-table表格中加入多條數(shù)據(jù),并且每條數(shù)據(jù)要通過(guò)el-select來(lái)選取相應(yīng)的值,做到動(dòng)態(tài)選擇,下面這篇文章主要給大家介紹了關(guān)于如何使用el-table+el-tree+el-select動(dòng)態(tài)選擇對(duì)應(yīng)值的相關(guān)資料,需要的朋友可以參考下
    2023-01-01
  • 在vue中使用SockJS實(shí)現(xiàn)webSocket通信的過(guò)程

    在vue中使用SockJS實(shí)現(xiàn)webSocket通信的過(guò)程

    最近接到一個(gè)業(yè)務(wù)需求,需要做一個(gè)聊天信息的實(shí)時(shí)展示的界面,下面小編把實(shí)現(xiàn)過(guò)程記錄下來(lái),對(duì)vue中使用SockJS實(shí)現(xiàn)webSocket通信的相關(guān)知識(shí)感興趣的朋友一起看看吧
    2018-08-08
  • 詳解在vue中如何實(shí)現(xiàn)屏幕錄制與直播推流功能

    詳解在vue中如何實(shí)現(xiàn)屏幕錄制與直播推流功能

    屏幕錄制和直播推流是現(xiàn)代Web應(yīng)用中常用的功能,Vue作為一種流行的JavaScript框架,提供了一些工具和庫(kù),可以方便地實(shí)現(xiàn)屏幕錄制和直播推流功能,本文將介紹如何在Vue中進(jìn)行屏幕錄制和直播推流,需要的朋友可以參考下
    2024-01-01
  • vuejs綁定class和style樣式

    vuejs綁定class和style樣式

    本文主要介紹了vue.js實(shí)現(xiàn)綁定class和style樣式的方法。具有很好的參考價(jià)值。下面跟著小編一起來(lái)看下吧
    2017-04-04

最新評(píng)論