理解vue组件的生命周期是高效开发的核心技能。每个组件都经历从诞生到消亡的过程,Vue在这些关键时刻提供了钩子函数,让我们精准介入操作。掌握这些钩子,你就能完全掌控组件行为。
一、生命周期是什么?简单比喻
想象组件像一个人:
出生前(创建阶段)
成年工作(挂载阶段)
状态变化(更新阶段)
退休离场(销毁阶段)
Vue在每段转换期都给我们留了"操作窗口"。
二、八大关键钩子函数实战解析
beforeCreate
组件刚初始化,数据观测和事件配置都未完成
使用场景:极少使用,此时无法访问data或methods
created ✅ 高频使用
完成数据观测,可访问data和methods,但dom未生成
典型操作:
created() {
this.loadUserData(); // 发起api请求
this.initTimer(); // 初始化定时器
}
beforeMount
模板编译完成,虚拟DOM已创建,真实DOM还未替换
mounted ✅ 核心节点
组件已挂载到真实DOM,可操作DOM元素
重要提示:
mounted() {
this.$refs.searchInput.focus(); // 操作DOM元素
this.initMap(); // 初始化第三方库(如地图)
}
beforeUpdate
数据变化导致重渲染前触发
适用场景:获取更新前的DOM状态
updated
虚拟DOM重新渲染后触发
警告:避免在此修改状态,可能导致死循环!
beforeUnmount(Vue 3)/ beforeDestroy(Vue 2)
组件销毁前调用
关键任务:清理工作
beforeUnmount() {
clearInterval(this.timer); // 清除定时器
this.chartInstance.dispose(); // 销毁ECharts实例
window.removeEventListener('resize', this.handleResize); // 移除事件监听
}
unmounted(Vue 3)/ destroyed(Vue 2)
组件已销毁,所有绑定和监听被移除
三、避坑指南与性能建议
异步请求放created还是mounted?
需要DOM操作放mounted,纯数据请求优先created(更早发起)
避免在updated中修改数据 → 用计算属性(computed)或侦听器(watch)替代
内存泄漏重灾区:务必在beforeUnmount中清除
定时器
全局事件监听
第三方库实例
实际项目中,80%的需求集中在created、mounted和beforeUnmount三个钩子。重点掌握它们的使用时机能解决绝大多数开发问题。
四、生命周期示意图助记
创建阶段:beforeCreate → created
挂载阶段:beforeMount → mounted
更新阶段:beforeUpdate → updated
销毁阶段:beforeUnmount → unmounted
总结:
生命周期钩子是Vue给开发者的控制开关。理解每个阶段的可用资源和限制,能让你在合适时机做正确操作——无论是初始化数据、操作DOM还是预防内存泄漏。多在实际项目中刻意练习,很快你就能凭直觉做出最佳选择。
Vue 实例有一个完整的生命周期,也就是从开始创建、初始化数据、编译模板、挂载Dom→渲染、更新→渲染、卸载等一系列过程,我们称这是 Vue 的生命周期。通俗说就是 Vue 实例从创建到销毁的过程,就是生命周期
State 的生命周期,指的是在用户参与的情况下,其关联的 Widget 所经历的,从创建到显示,再到更新最后到停止,直至销毁等各个阶段,不同的阶段涉及到特定的任务处理。
挂载(Mounting)挂载指的是组件被实例化并插入到dom中,顺序如下:constructor -> getDerivedStateFromProps -> render -> componentDidMount,更新(Updating)当state变化或者props变化会引起更新
小程序APP生命周期需要先从app.js这个文件开始,App() 必须在 app.js 中调用,必须调用且只能调用一次,app.js中定义了一些应用的生命周期函数,onLaunch----当小程序初始化完成时,会触发 onLaunch
其实在提到vue的生命周期和钩子函数的时候,有的人认为常用的钩子函数有10个,也有的人认为是8个,无论是10个还是8个对于我而言都是一样的,我们主要讲解8个vue的钩子函数。首先来一波官网的对于vue生命周期的图解
请不要死记生命周期的顺序和作用,要理解 React 将这些生命周期暴露出来给开发者调用是因为开发者有使用这些生命周期的需求,通过这些生命周期,我们可以完成一些事情。主要可分为 初始化阶段、挂载阶段、更新阶段、卸载阶段
Vue所有的生命周期钩子自动绑定在this上下文到实例中,因此你可以访问数据,对属性和方法进行运算。这意味着你不能使用箭头函数来定义一个生命周期方法。这是因为箭头函数绑定了父上下文
每个React类组件都包含“生命周期方法”(function组件是没有生命周期方法的),你可以重写这些方法,以便于在运行过程中特定的阶段执行这些方法。在接下来的文章中,生命周期方法的书写会遵照如下规则,以方便大家理解。
内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!