生命周期
约 1003 字大约 3 分钟
2026-01-09
生命周期阶段
相关信息
setup包含了beforeCreate和created的阶段
onBeforeMount() 挂载前
注册一个钩子,在组件被挂载之前被调用。
- 详情信息
当这个钩子被调用时,组件已经完成了其响应式状态的设置,但还没有创建 DOM 节点。它即将首次执行 DOM 渲染过程。
onMounted() 已挂载
注册一个回调函数,在组件挂载完成后执行。
- 详情信息
组件在以下情况下被视为已挂载
- 其所有同步子组件都已经被挂载 (不包含异步组件或
<Suspense>树内的组件)。 - 其自身的 DOM 树已经创建完成并插入了父容器中。注意仅当根容器在文档中时,才可以保证组件 DOM 树也在文档中。
onBeforeUpdate() 更新前
触发阶段
仅在 “更新阶段” 触发,首次渲染不触发
其触发的唯一条件是:组件已挂载完成后,响应式数据发生变化,导致组件需要重新渲染
注册一个钩子,在组件即将因为响应式状态变更而更新其 DOM 树之前调用。
详细信息
这个钩子可以用来在 Vue 更新 DOM 之前访问 DOM 状态。在这个钩子中更改状态也是安全的。
onUpdated() 更新
注册一个回调函数,在组件因为响应式状态变更而更新其 DOM 树之后调用。
详细信息
父组件的更新钩子将在其子组件的更新钩子之后调用。
这个钩子会在组件的任意 DOM 更新后被调用,这些更新可能是由不同的状态变更导致的,因为多个状态变更可以在同一个渲染周期中批量执行 (考虑到性能因素)。如果你需要在某个特定的状态更改后访问更新后的 DOM,请使用
nextTick()作为替代
onBeforeUnmount() 卸载前
注册一个钩子,在组件实例被卸载之前调用。
详细信息
当这个钩子被调用时,组件实例依然还保有全部的功能。
onUnmounted() 卸载后
注册一个回调函数,在组件实例被卸载之后调用。
详细信息
一个组件在以下情况下被视为已卸载:
其所有子组件都已经被卸载。
所有相关的响应式作用 (渲染作用以及
setup()时创建的计算属性和侦听器) 都已经停止。
可以在这个钩子中手动清理一些副作用,例如计时器、DOM 事件监听器或者与服务器的连接。
onActivated() 缓存组件激活
触发阶段
仅对 <keep-alive> 包裹的组件生效
首次渲染挂载后也会触发一次
注册一个回调函数,若组件实例是 <KeepAlive> 缓存树的一部分,当组件被插入到 DOM 中时调用。
onDeactivated() 缓存组件失活
注册一个回调函数,若组件实例是 <KeepAlive> 缓存树的一部分,当组件从 DOM 中被移除时调用。
父子组件的生命周期顺序
| 阶段 | 执行顺序核心原则 | 具体执行流程(从先到后) |
|---|---|---|
| 挂载阶段 | 先父后子,挂载完成先子后父 | 父 beforeMount → 子 beforeMount → 子 mounted → 父 mounted |
| 更新阶段 | 先父后子,更新完成先子后父 | 父 beforeUpdate → 子 beforeUpdate → 子 updated → 父 updated |
| 卸载阶段 | 先父后子,卸载完成先子后父 | 父 beforeUnmount → 子 beforeUnmount → 子 unmounted → 父 unmounted |
| 缓存激活 | 仅 <keep-alive> 包裹的组件 | 父 activated → 子 activated(若都被缓存) |
| 缓存失活 | 仅 <keep-alive> 包裹的组件 | 父 deactivated → 子 deactivated(若都被缓存) |
核心口诀:挂载先父后子(完成先子后父),更新 / 卸载先父后子(完成先子后父);
