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

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

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

vue的生命周期鉤子的介紹

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

vue的生命周期可以分為8個階段:

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

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

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

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

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

2、組件掛載到頁面涉及的兩個鉤子:

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

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

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

此時可以通過Dom API操作DOM元素

3、組件更新涉及的兩個鉤子

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

此時,可以對可能會被移除的元素做一些操作,比如移除事件監(jiān)聽等

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

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

4、組件銷毀涉及的兩個鉤子

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

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

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

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

值得注意的是,在使用keep-alive時,組件還會涉及兩外兩個鉤子

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

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

父子組件的生命周期

加載渲染過程

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

父組件更新過程

點擊“父組件更新”按鈕

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

子組件更新過程

點擊‘子組件更新’按鈕:

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

父子組件更新過程

點擊‘改變value’按鈕

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

銷毀過程

銷毀是執(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實例前
  beforeCreate() {
    console.log("parent beforeCreate 方法執(zhí)行了");
  },
  // 創(chuàng)建vue實例后
  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實例前
  beforeCreate() {
    console.log("Child beforeCreate 方法執(zhí)行了");
  },
  // 創(chuàng)建vue實例后
  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ù)據(jù)檢測和事件及配置,可以訪問data數(shù)據(jù),可以進(jìn)行網(wǎng)絡(luò)請求。created是在模板渲染成html前調(diào)用,所以不能進(jìn)行dom操作

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

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

相關(guān)文章

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    vuejs綁定class和style樣式

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

最新評論