vue3.0 生命周期总结

1,838 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第8天,点击查看活动详情

一、vue3.0 生命周期

  1. onBeforeMount(()=>{}) 组件挂载到节点上之前执行的函数

在挂载开始之前被调用:相关的 render 函数首次被调用。

  1. onMounted(()=>{}) 组件挂载完成后执行的函数

组件挂载时调用

  1. onBeforeUpdate(()=>{}) 组件更新之前执行的函数

数据更新时调用,发生在虚拟 DOM 打补丁之前。这里适合在更新之前访问现有的 DOM,比如手动移除已添加的事件监听器。

  1. onUpdated(()=>{}) 组件更新完成之后执行的函数

由于数据更改导致的虚拟 DOM 重新渲染和打补丁,在这之后会调用该钩子。

  1. onBeforeUnmount(()=>{}) 组件卸载之前执行的函数

在卸载组件实例之前调用。在这个阶段,实例仍然是完全正常的。

  1. onUnmounted(()=>{}) 组件卸载完成后执行的函数

卸载组件实例后调用。调用此钩子时,组件实例的所有指令都被解除绑定,所有事件侦听器都被移除,所有子组件实例被卸载。

  1. onActivated(()=>{}) 被 keep-alive 缓存的组件激活时调用

被包含在 中的组件,会多出两个生命周期钩子函数,被激活时执行

  1. onDeactivated(()=>{}) 被 keep-alive 缓存的组件停用时调用

比如从 A 组件,切换到 B 组件,A 组件消失时执行

  1. onErrorCaptured(()=>{}) 当捕获一个来自子孙组件的异常时激活钩子函数

当捕获一个来自子孙组件的错误时被调用。此钩子会收到三个参数:错误对象、发生错误的组件实例以及一个包含错误来源信息的字符串。此钩子可以返回 false 以阻止该错误继续向上传播。

代码示例打印函数执行

<template>
  <div class="cr-list">{{ sum }}</div>
  <button @click="sum += 1">加加</button>
</template>
<script lang="ts">
import {
  onMounted,
  onUnmounted,
  ref,
  onBeforeMount,
  onBeforeUpdate,
  onBeforeUnmount,
  onUpdated,
  onActivated,
  onDeactivated,
  onErrorCaptured,
} from 'vue';
export default {
  name: 'crTable',
  // 开始创建组件之前,在 beforeCreate 和 created 之前执行,创建的是 data 和 method
  setup() {
    let sum = ref(0);
    console.log('setup', 'vue3');
    // vue3 生命周期钩子函数
    // 组件挂载到节点上之前执行的函数
    onBeforeMount(() => {
      console.log('onBeforeMount', 'vue3');
    });
    // 组件挂载完成后执行的函数
    onMounted(() => {
      console.log('onMounted', 'vue3');
    });
    // 组件更新之前执行的函数
    onBeforeUpdate(() => {
      console.log('onBeforeUpdate', 'vue3');
    });
    // 组件更新完成之后执行的函数
    onUpdated(() => {
      console.log('onUpdated', 'vue3');
    });
    // 组件卸载之前执行的函数
    onBeforeUnmount(() => {
      console.log('onBeforeUnmount', 'vue3');
    });
    // 组件卸载完成后执行的函数
    onUnmounted(() => {
      console.log('onUnmounted', 'vue3');
    });
    // 被包含在 <keep-alive> 中的组件,会多出两个生命周期钩子函数,被激活时执行
    onActivated(() => {
      console.log('onActivated', 'vue3');
    });
    // 比如从 A 组件,切换到 B 组件,A 组件消失时执行
    onDeactivated(() => {
      console.log('onDeactivated', 'vue3');
    });
    // 当捕获一个来自子孙组件的异常时激活钩子函数
    onErrorCaptured(() => {
      console.log('onErrorCaptured', 'vue3');
    });
    return {
      sum,
    };
  },
  // vue2 生命周期钩子函数
  beforeCreate() {
    console.log('beforeCreate', 'vue2');
  },
  created() {
    console.log('created', 'vue2');
  },
  beforeMount() {
    console.log('beforeMount', 'vue2');
  },
  mounted() {
    console.log('mounted', 'vue2');
  },
  beforeUpdate() {
    console.log('beforeUpdate', 'vue2');
  },
  updated() {
    console.log('updated', 'vue2');
  },
  beforeUnmount() {
    console.log('beforeDestroy', 'vue2');
  },
  unmounted() {
    console.log('unmounted', 'vue2');
  },
  activated() {
    console.log('activated', 'vue2');
  },
  deactivated() {
    console.log('deactivated', 'vue2');
  },
  errorCaptured() {
    console.log('errorCaptured', 'vue2');
  },
};
</script>
<style lang="scss">
@import '@/assets/scss/variables.scss';
</style>

二、vue2.0 -> vue3.0 生命周期

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