Vue3 Lifecycle Hooks

Vue 3 生命周期钩子详解

Vue 3 的生命周期钩子分为 Options APIComposition API 两种使用方式,核心流程相同但语法有差异。以下是完整生命周期流程和每个钩子的详细说明:


Composition API 生命周期流程图

html 复制代码
<template>
  <div>实际参数{{count}}</div>
</template>

<script setup lang="ts">
import {
  ref,
  onBeforeMount,
  onMounted,
  onBeforeUpdate,
  onUpdated,
  onBeforeUnmount,
  onUnmounted,
} from "vue";

const count= ref<number>(0)
let timer = ref<any>(null)
// 挂载阶段
onBeforeMount(() => {
  console.log('DOM挂载前')
})

onMounted(() => {
  console.log('DOM已挂载')
  timer.value = setInterval(()=> {
    count.value += 1
  },1000)
})

// 数据已经更新
onBeforeUpdate(() => {
  console.log('数据更新前',  count.value)
})

onUpdated(() => {
  console.log('数据更新后')
})

// 卸载阶段
onBeforeUnmount(() => {
  console.log('组件卸载前')
})

onUnmounted(() => {
  console.log('组件已卸载')
})

</script>
1. 创建阶段 (Creation)
Options API Composition API 触发时机
beforeCreate setup() 替代 组件实例初始化前,无法访问 datamethods
created setup() 替代 组件实例创建完成,可访问 data/methods,但未挂载 DOM
2. 挂载阶段 (Mounting)
Options API Composition API 触发时机
beforeMount onBeforeMount DOM 挂载前,虚拟 DOM 已生成,但未插入页面
mounted onMounted DOM 挂载完成,可操作真实 DOM,子组件不一定完成挂载
3. 更新阶段 (Updating)
Options API Composition API 触发时机
beforeUpdate onBeforeUpdate 数据变化后,虚拟 DOM 重新渲染前(适合获取更新前状态)
updated onUpdated 虚拟 DOM 重新渲染完成,DOM 已更新(避免在此修改状态,可能循环更新)
4. 卸载阶段 (Unmounting)
Options API Composition API 触发时机
beforeUnmount onBeforeUnmount 组件卸载前,实例仍可用(清理定时器/事件监听)
unmounted onUnmounted 组件卸载完成,所有绑定和监听被移除
5. 特殊钩子
钩子 用途
onErrorCaptured 捕获子孙组件的错误(类似 React ErrorBoundary)
onRenderTracked 开发调试:跟踪虚拟 DOM 重新渲染时的依赖
onRenderTriggered 开发调试:追踪触发重新渲染的依赖变化
onActivated <keep-alive> 缓存的组件激活时调用
onDeactivated <keep-alive> 缓存的组件停用时调用
javascript 复制代码
// 错误捕获示例
import { onErrorCaptured } from 'vue';

export default {
  setup() {
    onErrorCaptured((err, instance, info) => {
      console.error("子组件错误:", err);
      return false; // 阻止错误向上传播
    });
  }
}

最佳实践

  1. 资源清理 :在 onBeforeUnmount/onUnmounted 中移除事件监听、定时器。
  2. 避免在 onUpdated 修改状态:可能导致无限循环更新。
  3. 异步操作 :在 onMountedsetup 中发起 API 请求。
  4. DOM 操作 :必须在 onMounted 之后进行。
  5. Composition API 优势:逻辑更聚合,同一功能代码集中管理。
javascript 复制代码
// Composition API 逻辑聚合示例
export default {
  setup() {
    // 数据逻辑
    const data = ref(null);
    
    // 生命周期整合
    onMounted(fetchData);
    onUnmounted(cleanup);
    
    // 方法集中定义
    function fetchData() {
      axios.get('/api').then(res => data.value = res);
    }
    
    function cleanup() { /* ... */ }
    
    return { data };
  }
}

💡 提示:Vue 3 中 beforeDestroydestroyed 已重命名为 onBeforeUnmount/onUnmounted,更语义化。

相关推荐
Revio Lab13 小时前
把 AI 生成的 HTML 当 Markdown 来管:Web-Doc 自托管文档站实践
前端·html·mcp·html文档
之歆13 小时前
DAY_13DOM操作完全指南DOM基础API与节点操作(上)
开发语言·前端·javascript·ecmascript
zhoumeina9913 小时前
如何保证不同位置切换合成底图的渲染顺序
java·前端·javascript
海上彼尚13 小时前
Nodejs也能写Agent - 3.基础篇 - Tools 与 Tool Calling
前端·人工智能·后端·node.js
用户1257585243613 小时前
GoFrame + Vue3 后台管理框架,CRUD 代码生成器一键搭 RBAC 权限系统
前端
七十二時_阿川13 小时前
Electron 如何自定义菜单?这篇帮你实现原生体验!
前端·electron
bot55566613 小时前
企业微信ipad协议的消息引用与回复机制
javascript
七十二時_阿川13 小时前
Electron App 速查表:生命周期事件、方法、平台差异
前端·electron
七十二時_阿川13 小时前
Electron 多显示器开发?这篇帮你搞定屏幕坐标与窗口定位!
前端·electron
七十二時_阿川13 小时前
Electron Tray API 详解:托盘图标、右键菜单、气泡通知
前端·electron