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

Vue中的生命周期詳細解讀

 更新時間:2023年08月17日 09:47:29   作者:飄飄~  
這篇文章主要介紹了Vue中的生命周期詳細解讀,每個 Vue 組件實例在創(chuàng)建時都需要經歷一系列的初始化步驟,比如設置好數(shù)據(jù)偵聽,編譯模板,掛載實例到 DOM,以及在數(shù)據(jù)改變時更新 DOM,需要的朋友可以參考下

前言

每個 Vue 組件實例在創(chuàng)建時都需要經歷一系列的初始化步驟,比如設置好數(shù)據(jù)偵聽,編譯模板,掛載實例到 DOM,以及在數(shù)據(jù)改變時更新 DOM。

說明:Vue生命周期是學習Vue非常重要的知識點,其中生命周期鉤子在程序開發(fā)中有著十分重要的地位。

在此過程中,它也會運行被稱為生命周期鉤子的函數(shù),讓開發(fā)者有機會在特定階段運行自己的代碼。

一、生命周期圖解

二、八個重要階段 

1.beforeCreate( 創(chuàng)建前 )

在組件實例初始化完成之后立即調用。

interface ComponentOptions {
  beforeCreate?(this: ComponentPublicInstance): void
}

會在實例初始化完成、props 解析之后、 data()  和  computed  等選項處理之前立即調用。

注意,組合式 API 中的  setup()  鉤子會在所有選項式 API 鉤子之前調用, beforeCreate()  也不例外。

2.created ( 創(chuàng)建后 )

在組件實例處理完所有與狀態(tài)相關的選項后調用。

interface ComponentOptions {
  created?(this: ComponentPublicInstance): void
}

當這個鉤子被調用時,以下內容已經設置完成:響應式數(shù)據(jù)、計算屬性、方法和偵聽器。然而,此時掛載階段還未開始,因此  $el  屬性仍不可用。 

3.beforeMount(掛載前)

在組件被掛載之前調用。

interface ComponentOptions {
  beforeMount?(this: ComponentPublicInstance): void
}

當這個鉤子被調用時,組件已經完成了其響應式狀態(tài)的設置,但還沒有創(chuàng)建 DOM 節(jié)點。它即將首次執(zhí)行 DOM 渲染過程。

這個鉤子在服務端渲染時不會被調用。

4.mounted(掛載完成)

在組件被掛載之后調用。

interface ComponentOptions {
  mounted?(this: ComponentPublicInstance): void
}

組件在以下情況下被視為已掛載:

  • 所有同步子組件都已經被掛載。(不包含異步組件或  <Suspense>  樹內的組件)
  • 其自身的 DOM 樹已經創(chuàng)建完成并插入了父容器中。注意僅當根容器在文檔中時,才可以保證組件 DOM 樹也在文檔中。

這個鉤子通常用于執(zhí)行需要訪問組件所渲染的 DOM 樹相關的副作用,或是在服務端渲染應用中用于確保 DOM 相關代碼僅在客戶端被調用。

5.beforeUpdate(修改前)

在組件即將因為一個響應式狀態(tài)變更而更新其 DOM 樹之前調用。

interface ComponentOptions {
  beforeUpdate?(this: ComponentPublicInstance): void
}

這個鉤子可以用來在 Vue 更新 DOM 之前訪問 DOM 狀態(tài)。在這個鉤子中更改狀態(tài)也是安全的。

6.updated(更新后)

在組件因為一個響應式狀態(tài)變更而更新其 DOM 樹之后調用。

interface ComponentOptions {
  updated?(this: ComponentPublicInstance): void
}

父組件的更新鉤子將在其子組件的更新鉤子之后調用。

這個鉤子會在組件的任意 DOM 更新后被調用,這些更新可能是由不同的狀態(tài)變更導致的。

如果你需要在某個特定的狀態(tài)更改后訪問更新后的 DOM,請使用 nextTick() 作為替代。

7.beforeDestroy(銷毀前)

在實例銷毀之前調用,實例仍然完全可用,

這一步還可以用this來獲取實例,一般在這一步做一些重置的操作,比如清除掉組件中的定時器 和 監(jiān)聽的dom事件

8.destroyed(銷毀后)

在實例銷毀之后調用,調用后,所以的事件監(jiān)聽器會被移出,所有的子實例也會被銷毀,該鉤子在服務器端渲染期間不被調用

三、代碼演示

<!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>Vue的數(shù)據(jù)模型</title>
    <script src="../js/vue.js"></script>
  </head>
  <body>
    <div id="app">
      {{msg}}
      <button @click="test">按鈕</button>
      <ul id="My">
        <li>111</li>
      </ul>
    </div>
    <script>
      let vm = new Vue({
        el: "#app",
        data: {
          msg: "hello",
          //   time: new Date(),
          msg: true,
        },
        methods: {
          test() {
            console.log("點擊按鈕-----");
          },
        },
        //鉤子函數(shù),生命周期,在beforeCreate這個階段,
        //現(xiàn)在屬性msg數(shù)據(jù)還沒有綁定到實例對象vm上,所以數(shù)據(jù)不能輸出來
        //鉤子函數(shù)在new Vue()之后執(zhí)行 Vue內部給實例添加了一些屬性(data)和方法(methods)
        //鉤子函數(shù)在data和methods之前執(zhí)行
        beforeCreate() {
          //屬性或方法聲明了,但沒有和實例綁定
          console.log(
            "beforeCreated函數(shù)執(zhí)行了,---但此時獲取不到實例內的屬性和方法",
            this.msg
          ); //輸出:undefined
        },
        //生命周期,在created這個階段屬性msg數(shù)據(jù)綁定到vm實例對象上
        //data和methods之后執(zhí)行
        created() {
          //屬性和方法綁定到實例上,可以通過實例進行調用
          console.log(
            "created執(zhí)行了,---此時可以獲取data和methods中的變量值",
            this.msg
          ); //輸出:'hello
        },
        /* 2.掛載 */
        //虛擬dom掛載成真實dom之前,不可以操作dom
        //使用場景,預處理data,不會觸發(fā)update鉤子函數(shù)
        beforeMount() {
          console.log(
            "beforeMount執(zhí)行了,---但此時獲取不到真實的DOM節(jié)點",
            "掛載之前"
          );
          console.log(document.getElementById("app"));
        },
        //虛擬dom掛載完畢變成真實dom,此處可以可以操作dom節(jié)點
        mounted() {
          console.log("mounted執(zhí)行了,---此時可以獲取到真實的DOM", "掛載后");
          console.log(document.getElementById("app"));
        },
        /*2.更新*/
        //更新前
        beforeUpdate() {
          console.log(document.querySelectorAll("#My>li"));
          console.log(
            "beforeUpdate函數(shù)執(zhí)行了,---此時獲取不到更新的真實DOM",
            this.msg
          );
        },
        //更新后
        //場景:獲取到更新的真實DOM節(jié)點
        updated() {
          console.log(document.querySelectorAll("#My>div"));
          console.log(
            "update函數(shù)執(zhí)行了,---此時可以獲取到更新的真實DOM",
            this.msg
          );
        },
        /*銷毀*/
        //銷毀監(jiān)聽
        beforeDestroy() {
          console.log("beforeDestroy函數(shù)執(zhí)行了", this.msg);
        },
        destroyed() {
          console.log("destroy函數(shù)執(zhí)行了", this.msg);
        },
      });
      setInterval(() => {
        vm.$destroy();
      }, 5000);
    </script>
  </body>
</html>

相關文章

  • vue小白入門教程

    vue小白入門教程

    vue是一套用于構建用戶界面的漸進式框架,本文通過實例給大家介紹了vue入門教程適用小白初學者,非常不錯,具有參考借鑒價值,需要的朋友參考下吧
    2018-04-04
  • UniApp在Vue3下使用setup語法糖創(chuàng)建和使用自定義組件的操作方法

    UniApp在Vue3下使用setup語法糖創(chuàng)建和使用自定義組件的操作方法

    通過defineProps定義屬性,defineEmits定義事件,computed創(chuàng)建計算屬性,emitEvent方法觸發(fā)事件,在其他組件中導入并使用這些自定義組件,傳遞屬性和監(jiān)聽事件,實現(xiàn)組件的復用性和可維護性,感興趣的朋友跟隨小編一起看看吧
    2024-11-11
  • 解決antd日期選擇組件,添加value就無法點擊下一年和下一月問題

    解決antd日期選擇組件,添加value就無法點擊下一年和下一月問題

    這篇文章主要介紹了解決antd日期選擇組件,添加value就無法點擊下一年和下一月問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-10-10
  • vue如何修改el-form-item中的label樣式修改問題

    vue如何修改el-form-item中的label樣式修改問題

    這篇文章主要介紹了vue如何修改el-form-item中的label樣式修改問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • Vue3訪問頁面時自動獲取數(shù)據(jù)的方法實現(xiàn)

    Vue3訪問頁面時自動獲取數(shù)據(jù)的方法實現(xiàn)

    本文介紹了在Vue3中如何利用生命周期鉤子函數(shù)和定時器實現(xiàn)訪問頁面時自動獲取數(shù)據(jù)的方法,這種方法適用于需要在頁面加載時即時更新數(shù)據(jù)顯示的場景,感興趣的可以了解一下
    2024-11-11
  • 詳解Vue的監(jiān)聽屬性

    詳解Vue的監(jiān)聽屬性

    這篇文章主要為大家介紹了Vue的監(jiān)聽屬性,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2021-11-11
  • vue中vant組件樣式失效問題及解決

    vue中vant組件樣式失效問題及解決

    這篇文章主要介紹了vue中vant組件樣式失效問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-04-04
  • Vue開發(fā)環(huán)境中修改端口號的實現(xiàn)方法

    Vue開發(fā)環(huán)境中修改端口號的實現(xiàn)方法

    這篇文章主要介紹了Vue開發(fā)環(huán)境中修改端口號的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-08-08
  • nodejs讀取并去重excel文件

    nodejs讀取并去重excel文件

    給大家?guī)硪黄P于用nodejs實現(xiàn)excel文件的讀取并去重的功能,有興趣的朋友參考學習下。
    2018-04-04
  • 前端Vue如何獲取登錄的用戶名或用戶id代碼實例

    前端Vue如何獲取登錄的用戶名或用戶id代碼實例

    在前端開發(fā)中,獲取登錄用戶的用戶名是一項常見的需求,這篇文章主要給大家介紹了關于前端Vue如何獲取登錄的用戶名或用戶id的相關資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2024-07-07

最新評論