Vue生命周期

一、Vue的生命周期及其阶段

Vue生命周期:一个Vue实例从 创建 到 销毁 的整个过程。也就是从开始创建、初始化数据、编译模板、挂载Dom→渲染、更新→渲染、卸载等一系列过程,我们称这是 Vue 的生命周期。

生命周期的四个阶段:① 创建 ② 挂载 ③ 更新 ④ 销毁

二、Vue生命周期函数(钩子函数)

Vue生命周期过程中,会自动运行一些函数,被称为【生命周期钩子】--- 》让开发者可以在【特定阶段】运行自己的代码。

接下来展开讲讲这些生命周期函数:

  • beforeCreate(创建前):实例初始化后立即调用,此时数据观测(data)、事件/监听器( event /watcher )尚未设置,也就是说不能访问到data、computed、watch、methods上的方法和数据。

  • created (创建后) :实例创建完成,实例上配置的 options 包括 data、computed、watch、methods 等都配置完成,但DOM未挂载,所以不能访问到 $el 属性。

  • 用途 :适合数据初始化(如发起异步请求),但不可操作 DOM。
  • beforeMount(挂载前) :模板已编译为虚拟 DOM ,但尚未渲染到页面。此时 $el 是初始模板(如 {``{a}} 未解析)。无法操作渲染后的 DOM 元素。

  • 虚拟DOM本质上是一个JavaScript对象,它是对真实DOM的抽象。虚拟DOM通过在内存中创建一个虚拟的DOM树,记录新旧树的差异(diff),然后将这些差异一次性更新到真实的DOM中。这样可以避免频繁的DOM操作,提高渲染效率。

  • mounted(挂载后) :实例已挂载到真实 DOM,$el 可访问,页面完成首次渲染。

  • 用途 :适合DOM 操作 ​(如初始化第三方库)、异步请求依赖 DOM 的场景。

  • beforeUpdate(更新前):响应式数据更新时调用,数据已更新,但 DOM 尚未重新渲染(页面显示旧数据)。

  • updated(更新后) :虚拟 DOM 重新渲染并更新真实 DOM 后调用。

  • 用途 :可执行依赖新 DOM 的操作,但需避免在此修改数据(可能导致无限循环)。

  • beforeDestroy(销毁前) :实例销毁之前调用。这一步,实例仍然完全可用,this 仍能获取到实例,data、methods 可访问。

  • ​用途 :执行清理工作​(如移除事件监听、取消定时器)。

  • destroyed(销毁后):实例销毁完成,所有绑定(数据、事件、子组件)已解除。无法再操作实例的属性和方法。

created和mounted的区别

  • created:在模板渲染成html前调用,即通常初始化某些属性值,然后再渲染成视图。

  • mounted:在模板渲染成html后调用,通常是初始化页面完成后,再对html的dom节点进行一些需要的操作。

三、keep-alive 的生命周期

keep-alive 是 Vue 提供的一个内置组件,用来对组件进行缓存------在组件切换过程中将状态保留在内存中,防止重复渲染DOM。

如果为一个组件包裹了 keep-alive,那么它会多出两个生命周期:deactivated、**actived。**同时,beforeDestroy 和 destroyed 就不会再被触发了,因为组件不会被真正销毁。

  • 当组件被换掉时,会被缓存到内存中,触发 deactivated生命周期
  • 当组件被切回来时,再去缓存里找这个组件,触发 activated钩子函数

四、Vue2 与 Vue3 生命周期的区别

阶段 ​Vue 2 钩子函数 ​Vue 3 钩子函数(选项式) ​Vue 3 Composition API 函数
​创建前 beforeCreate beforeCreate(不推荐使用) 由 setup() 替代逻辑
​创建后 created created(不推荐使用) 由 setup() 替代逻辑
​挂载前 beforeMount beforeMount onBeforeMount
​挂载后 mounted mounted onMounted
​更新前 beforeUpdate beforeUpdate onBeforeUpdate
​更新后 updated updated onUpdated
​销毁前 beforeDestroy beforeUnmount onBeforeUnmount
​销毁后 destroyed unmounted onUnmounted
调试钩子 无 新增 renderTracked、renderTriggered onRenderTracked、onRenderTriggered

Vue3 的生命周期与 Vue2 的核心区别可概括为:​

  1. 钩子函数名称调整(如销毁阶段 beforeDestroy → beforeUnmount)
  2. 引入 Composition API 的 setup 替代 beforeCreate/created,并新增调试钩子
相关推荐
程序员老赵40 分钟前
Docker 部署青龙面板:轻松搭建定时任务管理平台
前端·docker·开源
Swot41 分钟前
Asciidoctor 公式数字下标错位问题:原因分析与解决方案
前端
Swot41 分钟前
leo-editor 中将 Markdown 内容转成 asciidoc 格式
前端
狒狒AI1 小时前
Remotion / GSAP+Three / HyperFrames / Skia 四栈实测:代码渲染知识视频的选栈方法(附开源技能)
前端·人工智能·aigc
修炼的dance1 小时前
浏览器里导出H.265,8.5秒和55.5秒差在硬件
前端
补码缩写1 小时前
WebCodecs选编码器,探测之后还要验解码和播放
前端
大文说跨境1 小时前
亚马逊多账号管理浏览器怎么选?云登/紫鸟/AdsPower 对比
java·前端·自动化
hunter_0761 小时前
iOS 首页复杂嵌套滚动技术方案:头部固定 + 网格滚动 + Tab 吸顶 + 每 Tab 独立下拉刷新
前端
CoderYanger1 小时前
Java EE 进阶:4.Spring Web MVC 入门(第一弹)
java·开发语言·前端·spring·面试·java-ee·mvc
用户2788607285671 小时前
fallback 会盖掉平台提示词:system、空数组和 systemAppend 的差别
前端·后端