实用指南:Vue 实例生命周期

news/2025/11/16 14:10:25/文章来源:https://www.cnblogs.com/tlnshuju/p/19228093

实用指南:Vue 实例生命周期

2025-11-16 14:08  tlnshuju  阅读(0)  评论(0)    收藏  举报

一、什么是生命周期?

Vue 实例从创建销毁的整个过程,称为生命周期。
在这个过程中,Vue 会在特定阶段自动调用一些函数,这些函数就是生命周期钩子(Lifecycle Hooks)

你可以把它们理解为“生命阶段的回调函数”,在合适的时机执行特定逻辑。

二、Vue 2 生命周期图谱(经典八阶段)

以下是 Vue 2 的生命周期流程图(建议配图):

beforeCreate↓created  ←←←←← (可发起请求)↓beforeMount↓mounted  ←←←←← (DOM 可访问,常用)↓beforeUpdate↓updated↓beforeDestroy↓destroyed

红色箭头表示组件可能被销毁后重新创建(如 v-if 切换)。


1. beforeCreate

  • 触发时机:实例初始化之后,数据观测 (data observer) 和事件配置之前。
  • 能做什么:几乎不能做任何事,datamethods 还未初始化。
  • 使用场景:极少使用。
beforeCreate() {console.log('beforeCreate: ', this.message) // undefined
}

2. created

  • 触发时机:实例创建完成,数据观测、属性和方法运算已完成。
  • 能做什么
    • 访问 datamethods
    • 发起 Ajax 请求
    • 设置定时器(注意清理)
  • 不能做什么:访问 DOM($el 为 undefined
created() {console.log('created: ', this.message) // 正常输出this.fetchData() // ✅ 推荐在此发起请求
}

最佳实践:数据初始化、异步请求。


3. beforeMount

  • 触发时机:模板编译完成,但尚未挂载到 DOM。
  • 能做什么:很少使用,此时 $el 仍不可用。
  • 注意:服务端渲染(SSR)不会调用此钩子。
beforeMount() {console.log('beforeMount: ', this.$el) // undefined
}

4. mounted

  • 触发时机:实例挂载到 DOM 后,$el 被新创建的 vm.$el 替换。
  • 能做什么
    • 操作 DOM(如初始化第三方库:Swiper、ECharts)
    • 访问 $refs
    • 开始定时器
  • 重要:组件已“可见”,是最常用的钩子之一。
mounted() {console.log('mounted: ', this.$el) // 可访问 DOMthis.initChart() // 初始化图表this.timer = setInterval(() => {// 轮询}, 5000)
}

最佳实践:DOM 操作、第三方库初始化、定时器启动。


5. beforeUpdate

  • 触发时机:数据更新时,虚拟 DOM 重新渲染之前。
  • 能做什么:获取更新前的 DOM 状态。
  • 注意:不要在此修改状态,否则可能造成无限循环。
beforeUpdate() {console.log('视图更新前,数据是:', this.message)
}

6. updated

  • 触发时机:数据更新后,虚拟 DOM 重新渲染并应用到 DOM。
  • 能做什么
    • DOM 操作(依赖更新后的 DOM)
    • 避免在此发起状态更新,可能造成循环
  • 注意:子组件可能尚未更新。
updated() {console.log('视图已更新')// 可操作更新后的 DOM
}

⚠️ 避免updated 中修改 data,否则会再次触发更新。


7. beforeDestroy(Vue 2)/ beforeUnmount(Vue 3)

  • 触发时机:实例销毁前,实例仍完全可用。
  • 能做什么
    • 清理定时器
    • 移除事件监听
    • 解除第三方库绑定
  • 必须做:防止内存泄漏!
beforeDestroy() {clearInterval(this.timer)window.removeEventListener('resize', this.onResize)this.$refs.chart.dispose() // 如 ECharts
}

最佳实践:资源清理,必做!


8. destroyed(Vue 2)/ unmounted(Vue 3)

  • 触发时机:实例销毁后,所有绑定和监听器被移除。
  • 能做什么:很少使用,实例已不可用。
destroyed() {console.log('组件已销毁')
}

三、Vue 3 生命周期的变化

Vue 3 中,部分生命周期钩子名称更新,以与 Composition API 保持一致:

Vue 2Vue 3
beforeDestroybeforeUnmount
destroyedunmounted

其他钩子名称不变

Composition API 中的生命周期钩子

setup() 中,使用 onXxx 函数注册生命周期钩子:

<script>
import {onMounted,onUpdated,onUnmounted
} from 'vue'
export default {setup() {onMounted(() => {console.log('组件已挂载')})onUpdated(() => {console.log('组件已更新')})onUnmounted(() => {console.log('组件已卸载')// 清理资源})return {}}
}
</script>

✅ 所有 onXxx 函数必须在 setup()<script setup> 中调用。

四、生命周期实战应用场景

1. 发起 API 请求

created() {this.loading = truefetch('/api/users').then(res => res.json()).then(data => {this.users = data}).finally(() => {this.loading = false})
}

created 是发起请求的最佳时机。


2. 初始化第三方库

mounted() {this.chart = new Chart(this.$refs.canvas, {type: 'bar',data: this.chartData})
}

3. 清理资源(防内存泄漏)

export default {data() {return {timer: null}},mounted() {this.timer = setInterval(() => {this.updateTime()}, 1000)},beforeUnmount() {if (this.timer) {clearInterval(this.timer)this.timer = null}}
}

✅ 必须在 beforeUnmount 中清理!


4. 监听窗口事件

mounted() {window.addEventListener('resize', this.handleResize)
},
beforeUnmount() {window.removeEventListener('resize', this.handleResize)
}

五、常见问题与注意事项

❓ created 和 mounted 有什么区别?

阶段能访问数据能访问 DOM
created
mounted

数据请求放 created,DOM 操作放 mounted


❓ 为什么不能在 beforeCreate 中访问 data

因为此时 Vue 还未完成数据观测(Observer)的初始化。


❓ updated 会频繁触发吗?

会!每次数据更新都会触发 updated,避免在此执行昂贵操作。


❓ 子组件的生命周期顺序?

父组件 beforeCreatecreatedbeforeMount

子组件 beforeCreatecreatedmounted

父组件 mounted

先子后父

六、总结:生命周期钩子使用指南

钩子是否常用典型用途
created数据初始化、API 请求
mountedDOM 操作、第三方库初始化
beforeUpdate⚠️获取更新前状态
updated⚠️依赖更新后 DOM 的操作
beforeUnmount清理定时器、事件监听
unmounted⚠️组件销毁后通知

核心原则:在合适的时机做合适的事。

七、结语

感谢您的阅读!如果你有任何疑问或想要分享的经验,请在评论区留言交流!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/967080.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

React Native创建AndroidIOS流程完整指南

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

Ducky - BPMN 工作流管理系统

Ducky - BPMN 工作流管理系统 https://github.com/fanqingsong/ducky/tree/main 一个基于 FastAPI 和 SpiffWorkflow 的 BPMN 2.0 工作流管理系统,提供完整的流程定义管理、实例执行和可视化功能。功能特性核心功能✅…

图论建模问题

本文将不定期更新图论建模 行列二分图 给一个二维平面,建立二分图,左部点编号为横坐标,右部点编号为纵坐标,平面上一个点即为二分图上一条边。 CF1140F Extending Set of Points 建立行列二分图,把每一个点看成一…

python多进程通信中的Queue、SimpleQueue、Pipe

python多进程通信中的Queue、SimpleQueue、Pipepython多进程通信中的Queue、SimpleQueue、Pipepython多进程通信中的Queue、SimpleQueue、PipeQueue 多进程中的Queue的底层是使用Pipe实现的,因此使用Queue进行多进程通…

旧版本SiK数传的对频问题

最近折腾 3DR数传,芯片是 USB HM‑TRP ,地面端固件是 SiK 1.7,天空端是 2.2,无法连接。用 Mission Planner 看了下,地面端的 格式(FORMAT) 是 25,天空端是 26,不兼容。 尝试用 MP 给地面端刷固件,点了加载固…

2025年甘肃广告策划服务综合推荐排行榜

摘要 随着数字化转型加速,2025年甘肃广告策划行业迎来新一轮发展机遇,本土服务商在创意能力、技术应用和服务体系方面持续升级。本文基于市场调研、客户反馈和行业数据,为您呈现甘肃地区广告策划服务商综合实力排行…

2025年甘肃兰州专业的广告物料制作公司推荐

摘要 随着数字化转型的加速和线下体验经济的崛起,2025年甘肃兰州广告物料制作行业迎来新一轮发展机遇。本地市场需求持续增长,对创意设计、工艺质量和一站式服务的要求显著提升。本文基于行业数据、客户口碑和技术实…

2025年甘肃兰州比较好的广告物料制作服务团队

摘要 2025年,甘肃兰州广告物料制作行业持续蓬勃发展,随着数字化和个性化需求增长,本地服务商在技术、创意和执行层面不断升级。本文基于行业数据和用户口碑,为您推荐排名前十的广告物料制作服务团队,并提供详细分…

wordpress批量删除文章

wordpress批量删除文章批量删除文章,比如要删除分类ID为24993下面的文章delete from wp_posts using wp_posts,wp_term_relationships,wp_term_taxonomywherewp_posts.id=wp_term_relationships.object_idandwp_term_r…

OpenAI Agent Kit 全网首发深度解读与上手指南 - 详解

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

supabase

supabase https://github.com/supabase/supabaseSupabaseSupabase is the Postgres development platform. Were building the features of Firebase using enterprise-grade open source tools.Hosted Postgres Datab…

2025年加工型辣椒种子生产厂家排名前十:权威评测与选择攻略

摘要 随着2025年加工型辣椒种子行业的持续增长,市场需求聚焦于高品质、高产量品种。本文基于行业数据和市场调研,整理了前十名供应商排名,涵盖品牌介绍、核心优势及服务成果,并为种植户提供实用选择指南。排名表单…

251116

星期天 晴 醒的还是挺早的,就是一直困,起床也到了十点多。 磨蹭一下十一点出了门,把很久不骑的自行车挂闲鱼上,有人问了也没买 午饭真是不知道该吃啥 服了 鼠标坏了寄回去修,换了个新的回来,给绿联点赞。他们的数…

2025年加工型辣椒种子品牌前十强排行榜:镇江市镇研种业有限公司领跑行业

摘要 2025年加工型辣椒种子行业迎来高速发展,随着农业现代化和食品加工需求增长,优质种子成为种植户的核心关注点。本文基于市场调研和数据统计,为您呈现2025年加工型辣椒种子品牌排行榜前十强,重点推荐镇江市镇研…

2025年螺丝椒种子品牌综合实力排行榜前十强揭晓

摘要 随着农业现代化进程加速,螺丝椒种子行业在2025年迎来新一轮发展机遇。本文基于品种研发实力、市场占有率、用户口碑等维度,对国内主流螺丝椒种子品牌进行综合评估,为种植户提供权威参考。文末附有详细选购指南…

2025年线椒种子品牌前十强排名:专业选购指南与厂家实力解析

摘要 2025年线椒种子行业迎来技术升级与品质革新,随着种植技术的不断提升和市场需求的多样化,优质种子供应商成为产业发展的关键推动力。本文基于市场调研和行业数据分析,为您呈现当前线椒种子品牌的综合排名,并提…

2025年辣椒种子品牌前十强排行榜及深度解析

摘要 2025年辣椒种子行业持续发展,技术创新和品种优化成为市场主流,种植户对高品质种子的需求日益增长。本文基于市场调研和用户反馈,整理了2025年辣椒种子品牌排名前十的列表,为种植户和采购商提供参考。列表包括…

fastdfs版本编译升降版本

原fastdfs版本源码编译docker run -d --restart=always --privileged=true --net=host --name=fastdfs5 -e FASTDFS_IPADDR=10.40.17.249 -e WEB_PORT=8080 -v /data/fdfs/fastdfs:/home/fdfs registry.harbor.com:584…

增强现实(AR)在订单拣选中的应用:便捷的技术解析与中国市场前景

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

单核超 i9、多核追 i5,2024 Mac mini M4

https://post.smzdm.com/p/a86d56pn/ 从性能对标来看, Mac mini M4 的 CPU 单核性能超越英特尔酷睿 i9 - 14900K,在 Geekbench 6 测试中,M4 单核跑分高达 3800 多分,而 i9 - 14900K 约为 3500 分 多核性能方面,M4…