生命周期

木木木大约 3 分钟Vue前端生命周期

生命周期

钩子函数执行顺序

这些函数分为四个阶段:创建阶段、挂载阶段、更新阶段和销毁阶段。

创建阶段

在这个阶段,Vue 实例正在初始化。在这个阶段,Vue 实例将设置数据观察和事件、虚拟节点等。

  • beforeCreate:在实例化之后,初始化之前执行。
  • created:在实例化之后,初始化之后执行。

挂载阶段

在这个阶段,Vue 实例正在准备把自己渲染到DOM中。

  • beforeMount:在挂载开始之前执行。
  • mounted:在挂载结束后执行。

更新阶段

在这个阶段,Vue 实例正在更新DOM元素以反映数据变化。

  • beforeUpdate:在数据改变导致DOM重新渲染之前执行。
  • updated:在DOM重新渲染并应用更改之后执行。

销毁阶段

在这个阶段,Vue 实例正在被销毁。

  • beforeDestroy:在实例被销毁之前执行。
  • destroyed:在实例被销毁之后执行。

实际应用

beforeCreate

这个钩子函数在实例被创建之后立即调用。这是一个很好的地方来添加全局事件监听器,或初始化全局状态。

export default {
  beforeCreate() {
    console.log('beforeCreate: ', this.$store.state)
    this.$store.commit('increment')
  }
}

使用了 Vuex 状态管理库。在 beforeCreate 钩子函数中打印当前状态,并调用 increment 方法来增加状态。

created

created 钩子函数在实例被创建后被调用,但是在模板渲染之前。这是一个很好的地方来添加更多的全局事件监听器,或初始化局部状态。

export default {
  created() {
    console.log('created: ', this.$store.state)
  }
}

在 created 钩子函数中打印了当前状态。请注意,此时模板还没有被渲染,所以无法在这个钩子函数中访问渲染的DOM元素。

ounted

在 mounted 钩子函数中,实例已经被挂载到DOM中。这是执行DOM操作和访问渲染DOM元素的好地方。

export default {
  mounted() {
    console.log('mounted: ', this.$el)
  }
}

在 mounted 钩子函数中打印了 $el 属性,它是实例根元素的DOM节点。可以使用 $refs 来访问子组件的DOM元素。

beforeUpdate

在数据改变导致DOM重新渲染之前,beforeUpdate 钩子函数被调用。这是一个很好的地方来执行一些计算,但是请注意,此时DOM元素尚未更新。

export default {
  beforeUpdate() {
    console.log('beforeUpdate: ', this.message)
    this.message = 'Updated message'
  }
}

在 beforeUpdate 钩子函数中打印了 message 属性,并将其更新为“Updated message”。

updated

在DOM重新渲染并应用更改之后,updated 钩子函数被调用。这是一个很好的地方来访问更新后的DOM元素。

export default {
  updated() {
    console.log('updated: ', this.$el)
  }
}

在 updated 钩子函数中打印了 $el 属性,它是实例根元素的DOM节点。请注意,此时可以访问更新后的DOM元素。

beforeDestroy

在实例被销毁之前,beforeDestroy 钩子函数被调用。这是一个很好的地方来清除事件监听器和取消订阅。

export default {
  beforeDestroy() {
    window.removeEventListener('resize', this.handleResize)
    this.unsubscribe()
  }
}

在 beforeDestroy 钩子函数中移除了 resize 事件监听器,并取消了订阅。

destroyed

在实例被销毁之后,destroyed 钩子函数被调用。在这个时候,实例所有的事件监听器和观察者已经被移除。

export default {
  destroyed() {
    console.log('destroyed')
  }
}

在 destroyed 钩子函数中打印了一条消息。

上次编辑于:
贡献者: perhapsdone