Skip to content

vue 中的生命周期

选项式的生命周期

beforeCreate()

  • app.mount()创建 vue 实例之后,createApp()的配置项生效之前

created()

  • 最早能够访问 this 的钩子
  • beforeCreate()之后, createApp()配置项生效之后
  • 此时 data,computed, methods 和 watch 都配置好了

beforeMount

  • created 之后,应用还没有挂在指定的 html 元素上,也尚未在页面上渲染
  • 要挂载的时候就调这个钩子了

mounted()

  • 已经挂载 dom,可以进行修改访问
  • 应用挂载到指定的 html 元素后执行
  • 应用已经在页面上渲染出来了

beforeUpdate()

  • html 模板需要重新渲染时,比如 data 属性变化
  • 此时会调这个钩子

updated()

  • 数据更新后,html 重新渲染后调用

beforeUnmount()

  • 应用卸载前执行,此时应用还可以正常活动

unmounted()

  • 应用彻底卸载之后调
  • 应用上的事件监听和指令绑定都卸载了

组合式的生命周期

  • onBeforeMount 创建之前,DOM 元素不存在
  • onMounted 创建时,DOM 已经存在
js
// 比如随意获取一个元素的DOM
<div ref="wDom">{{ word }}</div>
const word = ref<string>("woodbell");
const wDom = ref<HTMLDivElement>();
// 这个读出来undefined
onBeforeMount(() => {
  console.log("创建之前", wDom.value);
});
// 这个就读的到
onMounted(() => {
  console.log("创建完成", wDom.value);
});
  • onBeforeUpdate 组件更新前,此时值还是之前的,此时可以做一些卸载操作
  • onUpdated 组件更新完成,值是之后的
js
<button @click="change">顺着声明周期改改</button>
const change = () => {
  word.value = "改了试试";
};
// 可以看到触发顺序也是正常的
onBeforeUpdate(() => {
  console.log("更新组件前", wDom.value?.innerText);
});
onUpdated(() => {
  console.log("更新组件完成", wDom.value?.innerText);
});
  • onBeforeUnmount 卸载前
  • onMounted 卸载完成

特定用途钩子

调试相关

  • onRenderTrack

  • onRenderTrigger 都是用于调试的钩子

  • onErrorCaptured 捕获后代组件传递的错误时触发

keepAlive 专用

  • onActivated keepalive 组件被激活时
  • onDeactivated keepalive 组件被冷冻时

SSR 相关

  • onServerPrefetch 组件实例在服务器上被渲染前调用,ssr