最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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ù)觀察和事件配置都還沒有準備好,而此時的實例中的data和el還是underfined狀態(tài),不可用的。Dom元素也未加載,此時還不能操作dom元素

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

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

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

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

在beforeMount之前,會找到對應的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ù)更改導致的虛擬 DOM 重新渲染和更新完畢之后被調(diào)用

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

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

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

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

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

該鉤子被調(diào)用后,對應 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ù),可以進行網(wǎng)絡請求。created是在模板渲染成html前調(diào)用,所以不能進行dom操作

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

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

相關文章

  • vue3+ts項目之安裝eslint、prettier和sass的詳細過程

    vue3+ts項目之安裝eslint、prettier和sass的詳細過程

    這篇文章主要介紹了vue3+ts項目02-安裝eslint、prettier和sass的詳細過程,在本文講解中需要注意執(zhí)行yarn format會自動格式化css、js、html、json還有markdown代碼,需要的朋友可以參考下
    2023-10-10
  • vue-cli 3如何使用vue-bootstrap-datetimepicker日期插件

    vue-cli 3如何使用vue-bootstrap-datetimepicker日期插件

    這篇文章主要介紹了vue-cli 3如何使用vue-bootstrap-datetimepicker日期插件,幫助大家更好的理解和學習使用vue框架,感興趣的朋友可以了解下
    2021-02-02
  • 詳解key在Vue3和Vue2的不同之處

    詳解key在Vue3和Vue2的不同之處

    key屬性是一個特殊的屬性,用于標識每個節(jié)點的唯一性。在Vue2.x版本中的key和Vue3.x版本中的key有很大的不同,那么在這篇文章中,我們將會討論Vue2中的key和Vue3中的key的區(qū)別
    2023-04-04
  • Vue3中axios請求封裝、請求攔截與相應攔截詳解

    Vue3中axios請求封裝、請求攔截與相應攔截詳解

    目前前端最流行的網(wǎng)絡請求庫還是axios,所以對axios的封裝很有必要,下面這篇文章主要給大家介紹了關于Vue3中axios請求封裝、請求攔截與相應攔截的相關資料,需要的朋友可以參考下
    2023-05-05
  • 解決Vue的項目使用Element ui 走馬燈無法實現(xiàn)的問題

    解決Vue的項目使用Element ui 走馬燈無法實現(xiàn)的問題

    這篇文章主要介紹了解決Vue的項目使用Element ui 走馬燈無法實現(xiàn)的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-08-08
  • 詳解vue-cli3多頁應用改造

    詳解vue-cli3多頁應用改造

    這篇文章主要介紹了詳解vue-cli3多頁應用改造,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-06-06
  • vue打包之后的dist文件如何運行

    vue打包之后的dist文件如何運行

    我們知道使用webpack打包vue項目后會生成一個dist文件夾,dist文件夾下有html文件和其他css、js以及圖片等,那么打包后的文件該如何正確運行呢?這篇文章主要給大家介紹了關于vue打包之后的dist文件如何運行的相關資料,需要的朋友可以參考下
    2023-05-05
  • Vue封裝的組件全局注冊并引用

    Vue封裝的組件全局注冊并引用

    這篇文章主要為大家詳細介紹了Vue封裝的組件全局注冊并引用,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-07-07
  • vue實現(xiàn)的封裝全局filter并統(tǒng)一管理操作示例

    vue實現(xiàn)的封裝全局filter并統(tǒng)一管理操作示例

    這篇文章主要介紹了vue實現(xiàn)的封裝全局filter并統(tǒng)一管理操作,結合實例形式詳細分析了vue封裝全局filter及相關使用技巧,需要的朋友可以參考下
    2020-02-02
  • vue數(shù)組雙向綁定問題及$set用法說明

    vue數(shù)組雙向綁定問題及$set用法說明

    這篇文章主要介紹了vue數(shù)組雙向綁定問題及$set用法說明,具有很好的參考價值,希望大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-09-09

最新評論

新昌县| 宜兴市| 库伦旗| 平定县| 丰原市| 南开区| 平和县| 武平县| 南城县| 翼城县| 喜德县| 绩溪县| 壶关县| 永宁县| 福清市| 新疆| 宝兴县| 乐至县| 紫云| 正镶白旗| 高阳县| 谷城县| 彭山县| 镇远县| 大厂| 张家口市| 丹巴县| 临高县| 淮阳县| 剑阁县| 原阳县| 常宁市| 丰宁| 灵丘县| 色达县| 桂林市| 中宁县| 南京市| 昆明市| 昔阳县| 彩票|