Vue3 生命周期鉤子函數(shù)

官方文檔

生命周期鉤子函數(shù) - Vue 組合式 API

官方聲明周期圖示

image

具體變化

1. 與 2.x 版本生命周期相對(duì)應(yīng)的組合式 API

  • beforeCreate -> 使用 setup()
  • created -> 使用 setup()
  • beforeMount -> onBeforeMount
  • mounted -> onMounted
  • beforeUpdate -> onBeforeUpdate
  • updated -> onUpdated
  • beforeDestroy -> onBeforeUnmount
  • destroyed -> onUnmounted
  • errorCaptured -> onErrorCaptured

可以發(fā)現(xiàn):

  1. beforeCreatecreatedsetup 幾乎是同時(shí)進(jìn)行的,所以可以把寫(xiě)在beforeCreatecreated 這兩周期的代碼直接寫(xiě)在 setup 里即可。
  2. 命名都形如 onXXX
  3. beforeDestroydestroyed 改為 onBeforeUnmountonUnmounted ,更語(yǔ)義化了。

代碼演示:

初始化頁(yè)面

初始化頁(yè)面的控制臺(tái)輸出
<template>
  <div id="app">
    <h1>{{ greet }}</h1>
    <button @click="change">vue3</button>
  </div>
</template>

<script lang="ts">
import {
  onBeforeMount,
  onBeforeUnmount,
  onBeforeUpdate,
  onMounted,
  onUpdated,
  ref
} from "vue";

export default {
  name: "App",
  setup() {
    const greet = ref("Hello World");
    function change() {
      greet.value = "Hello Vue3";
    }

    console.log("setup");
    console.log("------------------");

    onBeforeMount(() => {
      // console.log(el, binding, vnode, prevVnode);
      console.log("onBeforeMount");
      console.log("------------------");
    });
    onMounted(() => {
      console.log("onMounted");
      console.log("------------------");
    });

    onBeforeUpdate(() => {
      console.log("onBeforeUpdate");
      console.log("------------------");
    });
    onUpdated(() => {
      console.log("onUpdated");
      console.log("------------------");
    });

    onBeforeUnmount(() => {
      console.log("onUpdated");
      console.log("------------------");
    });
    onMounted(() => {
      console.log("onMounted");
      console.log("------------------");
    });

    return {
      greet,
      change
    };
  }
};
</script>
點(diǎn)擊按鈕后的頁(yè)面
點(diǎn)擊按鈕后控制臺(tái)輸出

新增的鉤子函數(shù)

除了和 2.x 生命周期等效項(xiàng)之外,組合式 API 還提供了以下調(diào)試鉤子函數(shù):

  • onRenderTracked
  • onRenderTriggered

兩個(gè)鉤子函數(shù)都接收一個(gè) DebuggerEvent,與 watchEffect 參數(shù)選項(xiàng)中的 onTrackonTrigger 類(lèi)似:

<template>
  <div id="app">
    <h1>{{ greet }}</h1>
    <button @click="change">vue3</button>
  </div>
</template>

<script lang="ts">
import { DebuggerEvent, onRenderTriggered, ref } from "vue";

export default {
  name: "App",
  setup() {
    const greet = ref("Hello World");
    function change() {
      greet.value = "Hello Vue3";
    }

    console.log("setup");
    console.log("------------------");

    onRenderTriggered((event: DebuggerEvent) => {
      console.log(event);
      console.log("onRenderTriggered");
      console.log("------------------");
    });

    return {
      greet,
      change
    };
  }
};
</script>
點(diǎn)擊按鈕后
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容