Vue生命周期总结

178 阅读2分钟

Vue2

生命周期的定义

一个组件从创建开始经历了数据初始化,挂载,更新等步骤后,最后被销毁的过程。

生命周期的过程

总共分为8个阶段:创建前/后,载入前/后,更新前/后,销毁前/后。

  • 创建 — 在组件创建时执行
  • 挂载 — DOM 被挂载时执行
  • 更新 — 当响应数据被修改时执行
  • 销毁 — 在元素被销毁之前立即运行
生命周期描述
beforeCreatevue实例的挂载元素el和数据对象data都为undefined,还未初始化。
createdvue实例的数据对象data有了,el为undefined,还未初始化。
beforeMountvue实例的$el和data都初始化了,但还是挂载之前为虚拟的dom节点,data.message还未替换。
mountedvue实例挂载完成,data.message成功渲染。
beforeUpdate数据更新时调用,发生在虚拟DOM重新渲染和打补丁之前
updated组件DOM已经更新,执行依赖于DOM的操作
activitedkeep-alive专属,组件被激活时调用
deadActivitedkeep-alive专属,组件被销毁时调用
beforeDestory组件销毁前调用
destoryed组件销毁后调用

第一次页面加载会触发哪几个钩子

beforeCreate, created, beforeMount, mounted 。

DOM 渲染在 哪个周期中就已经完成?

DOM 渲染在 mounted 中就已经完成了

父子组件生命周期执行顺序

  • 加载渲染过程 父beforeCreate->父created->-父beforeMount-> 子beforeCreate -> 子created-> 子beforeMount-> 子mounted->父mounted
  • 子组件更新过程 父beforeUpdate->子beforeUpdate->子updated->父updated
  • 父组件更新过程 父beforeUpdate->父updated
  • 销毁过程 父beforeDestroy->子beforeDestory->子destroyed->父destoryed

在哪个生命周期内调用异步请求?

可以在钩子函数created、beforemount、mounted中进行调用。

Vue3

完整生命周期钩子函数

  • onBeforeMount——挂载开始前调用
  • onMount——挂载后调用
  • onBeforeUpdate——当响应数据改变,且重新渲染前调用
  • onUpdated——重新渲染后调用
  • onBeforeUnmount——Vue实例销毁前调用
  • onUnmounted——实例销毁后调用
  • onActivated——当keep-alive组件被激活时调用
  • onDeactivated——当keep-alive组件取消激活时调用
  • onErrorCaptured——从子组件中捕获错误时调用

如何使用Vue3生命周期钩子函数

在组合API中,首先需要将生命周期钩子导入到项目中,才可以使用。

import {onMounted} from 'vue'

可能会追问的问题:

  • setup和created谁先执行
  • setup为什么没有beforeCreate和created