Vue2和vue3中的生命周期钩子函数的区别

1,381 阅读2分钟

Vue.js 的生命周期钩子函数是在 Vue 实例的不同阶段执行的一些特殊函数。它们允许你在特定时刻执行自定义逻辑。Vue 2 和 Vue 3 的生命周期钩子函数有很多相似之处,但也有一些区别。下面是 Vue 2 和 Vue 3 生命周期钩子函数的详细解释和比较。

Vue 2 生命周期钩子函数:

  1. beforeCreate:在实例初始化之后、数据观测 (data observer) 和 event/watcher 事件配置之前被调用。
  2. created:在实例创建完成后被立即调用。在这一步,实例已完成以下的配置:数据观测 (data observer),属性和方法的运算,watch/event 事件回调。然而,挂载阶段还没开始,$el 属性目前不可见。
  3. beforeMount:在挂载开始之前被调用:相关的 render 函数首次被调用。
  4. mounted:实例被挂载后调用,这时 el 被新创建的 vm.el替换了。如果根实例挂载到了一个文档内的元素上,当mounted被调用时vm.el 替换了。如果根实例挂载到了一个文档内的元素上,当 mounted 被调用时 vm.el 也在文档内。
  5. beforeUpdate:数据更新时调用,发生在虚拟 DOM 重新渲染和打补丁之前。你可以在这个钩子中进一步地更改状态,这不会触发附加的重渲染过程。
  6. updated:实例更新完毕后调用。这时,DOM 中的所有指令都已更新完成,你现在可以执行依赖于 DOM 的操作。然而,建议避免在此期间更改状态,因为这可能会导致更新无限循环。
  7. beforeDestroy:实例销毁之前调用。在这一步,实例仍然完全可用。
  8. destroyed:实例销毁后调用。调用后,所有的事件监听器会被移除,所有的子实例也会被销毁。

Vue 3 生命周期钩子函数:

  1. beforeCreate 和 created 在 Vue 3 中已被移除,取而代之的是 setup() 函数,它是 Vue 3 中的新特性,用于在组件实例化时设置响应式数据和函数。
  2. beforeMount:与 Vue 2 相同。
  3. mounted:与 Vue 2 相同。
  4. beforeUpdate:与 Vue 2 相同。
  5. updated:与 Vue 2 相同。
  6. beforeUnmount:在 Vue 3 中,beforeDestroy 被重命名为 beforeUnmount。
  7. unmounted:在 Vue 3 中,destroyed 被重命名为 unmounted。

举例:

Vue 2 示例:

new Vue({
  el: '#app',
  data: {
    message: 'Hello Vue!'
  },
  beforeCreate: function () {
    console.log('beforeCreate');
  },
  created: function () {
    console.log('created');
  },
  beforeMount: function () {
    console.log('beforeMount');
  },
  mounted: function () {
    console.log('mounted');
  },
  beforeUpdate: function () {
    console.log('beforeUpdate');
  },
  updated: function () {
    console.log('updated');
  },
  beforeDestroy: function () {
    console.log('beforeDestroy');
  },
  destroyed: function () {
    console.log('destroyed');
  }
});

Vue 3 示例:

import { createApp, onMounted, onUnmounted, onUpdated, onBeforeUpdate, onBeforeUnmount } from 'vue';

const app = createApp({
  data() {
    return {
      message: 'Hello Vue 3!'
    };
  },
  setup() {
    console.log('setup');
    onBeforeMount(() => {
      console.log('beforeMount');
    });
    onMounted(() => {
      console.log('mounted');
    });
    onBeforeUpdate(() => {
      console.log('beforeUpdate');
    });
    onUpdated(() => {
      console.log('updated');
    });
    onBeforeUnmount(() => {
      console.log('beforeUnmount');
    });
    onUnmounted(() => {
      console.log('unmounted');
    });
  }
});

app.mount('#app');

这些示例展示了 Vue 2 和 Vue 3 生命周期钩子函数的使用方法和不同点。在 Vue 3 中,使用了新的 setup() 函数和 Composition API 来替代 Vue 2 中的 beforeCreate 和 created 钩子函数。其他钩子函数的使用方法基本相同,只是在 Vue 3 中,beforeDestroy 和 destroyed 被重命名为 beforeUnmount 和 unmounted。