当前位置: 首页 > news >正文

vue3 中组件的生命周期详解

Vue 3 中,组件的生命周期(Lifecycle)是组件从 创建 → 挂载 → 更新 → 卸载 的一整套过程。
Vue 3 使用 组合式 API(Composition API)选项式 API(Options API) 都可以定义生命周期钩子。
下面我们分阶段详细讲解每个生命周期阶段、对应的钩子函数、执行时机和使用方式。


🧩 一、生命周期的总体流程图

创建阶段  →  挂载阶段  →  更新阶段  →  卸载阶段
beforeCreate → created → beforeMount → mounted↑setup() 在 beforeCreate 和 created 之间执行
更新阶段:
beforeUpdate → updated
卸载阶段:
beforeUnmount → unmounted

🧱 二、生命周期阶段详解(选项式 API)

1️⃣ 创建阶段

钩子执行时机说明
beforeCreate()实例初始化之后、数据观测 (reactivity) 之前此时无法访问 datacomputedmethods
created()实例创建完成后(数据已初始化)可访问 datamethods,但尚未挂载 DOM

📘 示例:

export default {data() {return { msg: 'Hello Vue3' }},beforeCreate() {console.log('beforeCreate:', this.msg) // undefined},created() {console.log('created:', this.msg) // 'Hello Vue3'}
}

2️⃣ 挂载阶段

钩子执行时机说明
beforeMount()在模板渲染到真实 DOM 之前执行可访问虚拟 DOM(未渲染)
mounted()组件已被挂载到真实 DOM可访问 $el、操作 DOM、调用第三方库

📘 示例:

export default {mounted() {console.log('DOM 元素:', this.$el) // 可访问真实 DOM}
}

3️⃣ 更新阶段

钩子执行时机说明
beforeUpdate()数据变更后、DOM 重新渲染前可读取最新数据,但 DOM 尚未更新
updated()数据变更导致的 DOM 更新完成后可操作已更新的 DOM(谨慎操作,防止死循环)

📘 示例:

export default {data() {return { count: 0 }},beforeUpdate() {console.log('beforeUpdate count:', this.count)},updated() {console.log('updated count:', this.count)}
}

4️⃣ 卸载阶段

钩子执行时机说明
beforeUnmount()组件卸载前可执行清理工作(如定时器、事件监听等)
unmounted()组件卸载完成后DOM 已被移除

📘 示例:

export default {beforeUnmount() {console.log('组件即将卸载')},unmounted() {console.log('组件已卸载')}
}

⚙️ 三、组合式 API(Composition API)中的生命周期

Vue 3 setup() 中不再使用 this,而是通过 onXxx 函数注册生命周期钩子。

选项式钩子组合式 API 对应函数
beforeCreate / created合并到 setup() 内执行
beforeMountonBeforeMount()
mountedonMounted()
beforeUpdateonBeforeUpdate()
updatedonUpdated()
beforeUnmountonBeforeUnmount()
unmountedonUnmounted()

📘 组合式 API 示例:

import { ref, onMounted, onUpdated, onUnmounted } from 'vue'export default {setup() {const count = ref(0)onMounted(() => {console.log('组件已挂载')})onUpdated(() => {console.log('组件更新了,count:', count.value)})onUnmounted(() => {console.log('组件卸载了')})return { count }}
}

🧠 四、特殊生命周期钩子(高级)

钩子函数触发时机用途
onActivated()<keep-alive> 缓存组件被激活时恢复缓存组件状态
onDeactivated()<keep-alive> 缓存组件被停用时暂停缓存组件任务
onErrorCaptured()捕获子组件的错误时全局错误处理或上报
onRenderTracked() / onRenderTriggered()响应式调试工具用于观察依赖追踪和触发更新的情况

📘 示例:

import { onActivated, onDeactivated, onErrorCaptured } from 'vue'export default {setup() {onActivated(() => console.log('组件被激活'))onDeactivated(() => console.log('组件被停用'))onErrorCaptured((err) => {console.error('捕获到子组件错误:', err)return false // 阻止继续向上传播})}
}

🪶 五、执行顺序总结

✅ 初次渲染:

beforeCreate → created → beforeMount → mounted

✅ 数据更新:

beforeUpdate → updated

✅ 卸载组件:

beforeUnmount → unmounted

✅ keep-alive 缓存组件:

activated → deactivated


📊 六、开发中常见用法场景

目标推荐钩子说明
初始化请求数据created / onMounted建议在 onMounted 中请求,保证 DOM 已准备好
操作 DOM / 第三方库mountedDOM 渲染完毕
监听全局事件mounted 注册 → beforeUnmount 卸载
定时器mounted 启动 → beforeUnmount 清理
路由切换缓存组件恢复onActivated
调试渲染性能onRenderTracked / onRenderTriggered
http://www.dtcms.com/a/549995.html

相关文章:

  • 单片机实现队列功能
  • 魔多 AI 支持 Seedance 系列在线生成:赠送免费生成额度
  • 怎样建立一个主题网站群晖做网站服务器 套件
  • 淘客app网站是怎么做的深圳做网站佰达科技三十
  • 【JavaScript】构造函数与 new 运算符
  • OpenEuler 22.03 安装 snmptt 1.5
  • 摇杆控制View
  • 常州网站建设段新浩网站推广公司有哪些
  • TCP三次握手和四次断开
  • 黑马JAVA+AI 加强08 File-IO流
  • (XMODEM协议)自旋锁异常报错
  • 关于光照探针的实验和疑问
  • 校园网站建设的优点wordpress最新文章链接插件
  • 南城网站建设公司策划山东省建设执业资格注册中心网站
  • 【机器学习】模型持久化与部署
  • 「用Python来学微积分」21. 玩转高阶导数
  • 不谈AI模型,只谈系统:SmartMediaKit低延迟音视频技术现实主义路线
  • 哪些证书对学历没硬性要求?高职生必看
  • 公司网站做推广做商城型网站
  • PyQt5 QSet完全指南:深入理解Qt的高性能集合容器
  • 乡村旅游电子商务网站建设有网站怎么做淘宝客
  • 狭小空间难嵌入?这款寻北仪重新定义新标准!
  • 成华区网站建设公司软件工程最好的出路
  • 网站的关键词怎么选择工信部网站登陆
  • Rust 复合类型深度解析:从元组与数组看内存安全与抽象设计
  • ASTMD4169对于医疗冷链包装在空陆联运中的测试验证
  • g++/gcc编译器与自动化构建make/Makefile
  • 高性能人工智能目标检测开山篇----YOLO v1算法详解(上篇)
  • 【文字库】新华字典部分年份出版汇总
  • 个体工商户备案网站备案wordpress推广