返回

Vue 生命周期执行顺序的那些坑

前端

Vue生命周期的执行顺序

Vue生命周期是一个组件从创建到销毁的过程。在这个过程中,组件会经历一系列的钩子函数,这些钩子函数可以让我们在组件的不同阶段执行不同的任务。

Vue生命周期的执行顺序如下:

  1. beforeCreate :在组件实例创建之前调用。
  2. created :在组件实例创建之后调用。
  3. beforeMount :在组件挂载到DOM之前调用。
  4. mounted :在组件挂载到DOM之后调用。
  5. beforeUpdate :在组件更新之前调用。
  6. updated :在组件更新之后调用。
  7. beforeDestroy :在组件销毁之前调用。
  8. destroyed :在组件销毁之后调用。

常见的错误示例

1. 在 beforeCreate 钩子函数中使用 this

beforeCreate 钩子函数中,组件实例还没有被创建,因此 this 是未定义的。如果您在 beforeCreate 钩子函数中使用了 this,可能会导致错误。

例如,以下代码会抛出错误:

beforeCreate() {
  console.log(this.name); // 错误:this is undefined
}

2. 在 created 钩子函数中操作DOM

created 钩子函数中,组件实例已经创建,但是还没有被挂载到DOM。如果您在 created 钩子函数中操作DOM,可能会导致错误。

例如,以下代码会抛出错误:

created() {
  document.getElementById('app').innerHTML = 'Hello World!'; // 错误:document.getElementById('app') is null
}

3. 在 beforeMount 钩子函数中访问子组件

beforeMount 钩子函数中,子组件还没有被创建。如果您在 beforeMount 钩子函数中访问子组件,可能会导致错误。

例如,以下代码会抛出错误:

beforeMount() {
  console.log(this.$children[0].name); // 错误:this.$children[0] is undefined
}

避免这些问题的方法

为了避免这些问题,您应该遵循以下几点建议:

  • beforeCreate 钩子函数中,不要使用 this
  • created 钩子函数中,不要操作DOM。
  • beforeMount 钩子函数中,不要访问子组件。

如果您遵循这些建议,可以避免在Vue生命周期中遇到一些常见的问题。