vue3生命周期函数

生命周期钩子名称对比表

阶段Vue 2 选项式 APIVue 3 组合式 API说明
创建前beforeCreateonBeforeCreate(已废弃)Vue 3 中 setup() 替代
创建完成createdsetup()(替代)setup 是入口,代替 beforeCreate 和 created
挂载前beforeMountonBeforeMount()名称一致
挂载完成mountedonMounted()名称一致
更新前beforeUpdateonBeforeUpdate()名称一致
更新完成updatedonUpdated()名称一致
卸载前beforeDestroyonBeforeUnmount()名称变更!
卸载完成destroyedonUnmounted()名称变更!
错误捕获errorCapturedonErrorCaptured()名称一致
激活(keep-alive)activatedonActivated()名称一致
停用(keep-alive)deactivatedonDeactivated()名称一致
调试:依赖追踪onRenderTracked()Vue 3 新增,开发模式专用
调试:触发更新onRenderTriggered()Vue 3 新增,开发模式专用

⚠️ 重要:Vue 3 中 没有 beforeDestroydestroyed,它们被重命名为 onBeforeUnmountonUnmounted


 详细对比与示例

1️⃣ beforeCreate & created → 被 setup() 替代

Vue 2 写法:

export default {beforeCreate() {console.log('组件创建前');},created() {console.log('组件创建完成');this.fetchData();},methods: {fetchData() { /* ... */ }}
}

Vue 3 写法(<script setup>):

<script setup>
import { onMounted } from 'vue';// setup() 函数体直接执行,替代 beforeCreate 和 created
console.log('组件创建完成');function fetchData() { /* ... */ }onMounted(() => {fetchData();
});
</script>

说明:Vue 3 的 setup() 在组件实例创建后、onBeforeMount 之前执行,等价于 Vue 2 的 beforeCreate + created


2️⃣ beforeMount / mounted → onBeforeMount / onMounted

Vue 2:

export default {mounted() {console.log('DOM 已挂载');this.$refs.input.focus();}
}

Vue 3:

<script setup>
import { onMounted, ref } from 'vue';const input = ref(null);onMounted(() => {console.log('DOM 已挂载');input.value.focus();
});
</script>

✅ 名称一致,行为一致。


3️⃣ beforeUpdate / updated → onBeforeUpdate / onUpdated

Vue 2:

export default {updated() {console.log('组件已更新');}
}

Vue 3:

<script setup>
import { onUpdated } from 'vue';onUpdated(() => {console.log('组件已更新');
});
</script>

✅ 完全一致。


4️⃣ beforeDestroy / destroyed → onBeforeUnmount / onUnmounted(⚠️ 名称变更)

Vue 2:

export default {beforeDestroy() {this.timer && clearInterval(this.timer);window.removeEventListener('resize', this.handleResize);},destroyed() {console.log('组件已销毁');}
}

Vue 3:

<script setup>
import { onMounted, onBeforeUnmount } from 'vue';let timer = null;onMounted(() => {timer = setInterval(() => { /* ... */ }, 1000);window.addEventListener('resize', handleResize);
});// ✅ 注意:是 onBeforeUnmount,不是 beforeDestroy
onBeforeUnmount(() => {if (timer) clearInterval(timer);window.removeEventListener('resize', handleResize);console.log('组件即将卸载');
});// onUnmounted 也可用
onUnmounted(() => {console.log('组件已卸载');
});
</script>

🔴 重点beforeDestroyonBeforeUnmountdestroyedonUnmounted
这是 唯一命名不一致 的地方,迁移时务必注意!


5️⃣ activated / deactivated → onActivated / onDeactivated

Vue 2:

export default {activated() {console.log('组件被激活');},deactivated() {console.log('组件被缓存');}
}

Vue 3:

<script setup>
import { onActivated, onDeactivated } from 'vue';onActivated(() => {console.log('组件被激活');
});onDeactivated(() => {console.log('组件被缓存');
});
</script>

✅ 名称一致,行为一致。


6️⃣ Vue 3 新增调试钩子
import { onRenderTracked, onRenderTriggered } from 'vue';onRenderTracked((event) => {console.log('依赖被追踪:', event);
});onRenderTriggered((event) => {console.log('更新被触发:', event);
});

💡 仅在开发模式有效,用于调试响应式系统,Vue 2 无对应功能。


🔄 生命周期执行顺序(Vue 2 vs Vue 3 完全一致)

setup()                   ← 替代 beforeCreate + created↓
onBeforeMount()           ← beforeMount↓
onMounted()               ← mounted↓
onBeforeUpdate()          ← beforeUpdate↓
onUpdated()               ← updated↓
onBeforeUnmount()         ← beforeDestroy↓
onUnmounted()             ← destroyed

✅ 执行顺序完全相同,只是写法和部分名称变化。

 生命周期执行顺序示例

import {onBeforeMount,onMounted,onBeforeUpdate,onUpdated,onBeforeUnmount,onUnmounted
} from 'vue';export default {setup() {console.log('1. setup');onBeforeMount(() => {console.log('2. onBeforeMount');});onMounted(() => {console.log('3. onMounted');});onBeforeUpdate(() => {console.log('4. onBeforeUpdate');});onUpdated(() => {console.log('5. onUpdated');});onBeforeUnmount(() => {console.log('6. onBeforeUnmount');});onUnmounted(() => {console.log('7. onUnmounted');});return {};}
};


✅ Vue 3 的优势(组合式 API)

优势说明
逻辑复用更强可在任意 .js 文件中使用生命周期钩子,封装可复用逻辑(如 useMouse.js
更好的 TypeScript 支持类型推导更准确
减少 this 混乱不再依赖 this,避免箭头函数中 this 指向问题
按逻辑组织代码不再分散在 datamethodswatch 中,而是按功能组织

🚀 迁移建议

  1. beforeDestroy → onBeforeUnmount
  2. destroyed → onUnmounted
  3. created 逻辑移到 setup() 中
  4. 所有生命周期钩子前加 on 前缀并从 vue 导入
  5. 优先使用 <script setup> + 组合式 API

✅ 总结

对比项Vue 2Vue 3
核心变化选项式 API组合式 API(推荐)
生命周期名称beforeDestroydestroyedonBeforeUnmountonUnmounted
入口函数createdsetup()
写法选项对象导入函数
逻辑复用mixins(有缺陷)自定义 Hook(推荐)
调试能力一般增强(onRenderTracked 等)

💡 一句话总结
Vue 3 的生命周期“行为不变、顺序不变”,只是“写法更新、命名微调、能力增强”
掌握 onBeforeUnmountonUnmounted 的命名变化,就能轻松迁移!

以前的选项api还可以用吗

选项式 API 在 Vue 3 中依然有效

你完全可以像 Vue 2 那样写代码:

<!-- Vue 3 中完全支持的选项式 API -->
<script>
export default {name: 'MyComponent',// ✅ datadata() {return {count: 0,message: 'Hello Vue 3'}},// ✅ 生命周期钩子(注意:名称已更新)created() {console.log('组件创建完成');},mounted() {console.log('组件已挂载');},// ⚠️ 注意:Vue 3 中是 beforeUnmount 和 unmountedbeforeUnmount() {console.log('组件即将卸载');},unmounted() {console.log('组件已卸载');},// ✅ methodsmethods: {increment() {this.count++;}},// ✅ computedcomputed: {doubleCount() {return this.count * 2;}},// ✅ watchwatch: {count(newVal, oldVal) {console.log(`count 从 ${oldVal} 变为 ${newVal}`);}}
}
</script><template><div><p>{{ message }}</p><p>Count: {{ count }}</p><p>Double: {{ doubleCount }}</p><button @click="increment">+1</button></div>
</template>

✅ 这段代码在 Vue 3 中可以直接运行,无需修改。


2️⃣ 与 Vue 2 的主要区别(仅两处)

功能Vue 2Vue 3(选项式 API)
销毁前钩子beforeDestroybeforeUnmount
销毁完成钩子destroyedunmounted

🔴 重要:这是唯一不兼容的地方。
如果你从 Vue 2 迁移,需要将:

  • beforeDestroy → 改为 beforeUnmount
  • destroyed → 改为 unmounted

3️⃣ Vue 3 推荐使用 <script setup>(组合式 API)

虽然选项式 API 可用,但 Vue 3 官方更推荐使用 <script setup>,因为它:

  • 更好的逻辑复用(自定义 Hook)
  • 更强的 TypeScript 支持
  • 更灵活的代码组织(按功能而非选项分组)
  • 更接近 React Hooks 的开发体验
<script setup>
import { ref, computed, watch, onMounted } from 'vue';const count = ref(0);
const message = ref('Hello Vue 3');const doubleCount = computed(() => count.value * 2);watch(count, (newVal) => {console.log('count 变化:', newVal);
});onMounted(() => {console.log('组件已挂载');
});function increment() {count.value++;
}
</script><template><div><p>{{ message }}</p><p>Count: {{ count }}</p><p>Double: {{ doubleCount }}</p><button @click="increment">+1</button></div>
</template>

4️⃣ 你可以在同一个项目中混合使用

Vue 3 允许你:

  • 新组件用 <script setup>(组合式 API)
  • 老组件保留选项式 API
  • 甚至在一个组件中混合使用(不推荐)
<script setup>
import { ref } from 'vue';const setupCount = ref(0);
</script><script>
export default {data() {return {optionsCount: 0}},methods: {incrementOptions() {this.optionsCount++;}}
}
</script>

✅ 这是合法的,但不建议混合使用,会造成代码混乱。


5️⃣ 官方态度

  • Vue 团队明确表示:选项式 API 不会废弃
  • 它仍然是 Vue 3 的一等公民
  • 适合:
    • 简单组件
    • 初学者
    • 从 Vue 2 迁移的项目

✅ 总结

问题回答
Vue 2 的选项式 API 在 Vue 3 中还能用吗?✅ 能用!完全支持
是否需要修改?

⚠️ 只需将 beforeDestroy → beforeUnmount

destroyed → unmounted

是否推荐使用?

👍 适合简单场景、迁移项目、初学者

但官方更推荐 <script setup>

会不会被废弃?❌ 不会,Vue 团队承诺长期支持

💡 建议

  • 新项目:优先学习和使用 <script setup>(组合式 API)
  • 老项目迁移:可以先保留选项式 API,逐步重构
  • 团队协作:统一风格,避免混合使用

所以,放心使用!Vue 3 对选项式 API 的支持非常友好,你有充分的时间去学习和过渡到组合式 API。

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

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

相关文章

无脑整合springboot2.7+nacos2.2.3+dubbo3.2.9实现远程调用及配置中心

简介&#xff1a; 好久没有写博客了&#xff0c;最近辞职了有时间进行一次分享&#xff0c;今天我们主要是使用单体服务springboot整合nacos实现配置中心&#xff0c;然后整合dubbo来实现远程的rpc调用。如下是本地案例架构图&#xff0c;生产者和消费者的配置在nacos配置中心上…

腾讯位置商业授权微信小程序逆地址解析(坐标位置描述)

微信小程序JavaScript SDK 开发指南 逆地址解析(坐标位置描述) reverseGeocoder(options:Object) 本接口提供由坐标到坐标所在位置的文字描述的转换&#xff0c;输入坐标返回地理位置信息和附近poi列表。 注&#xff1a;坐标系采用gcj02坐标系 options属性说明 属性类型必填…

3D商品展示:技术狂欢下的普及困局

当微软推出Copilot 3D——仅需一张照片即可生成可编辑的3D模型时&#xff0c;业界曾欢呼“建模门槛彻底消失”。然而技术的美好愿景却撞上现实的铜墙铁壁&#xff1a;当前电商平台3D商品加载卡顿导致用户跳出率超60%&#xff0c;企业3D化渗透率仍不足34%。绚烂的技术烟花下&…

(Arxiv-2025)Stand-In:一种轻量化、即插即用的身份控制方法用于视频生成

Stand-In&#xff1a;一种轻量化、即插即用的身份控制方法用于视频生成 paper是WeChat发布在Arxiv 2025的工作 paper title:Stand-In: A Lightweight and Plug-and-Play Identity Control for Video Generation Code&#xff1a;链接 图1&#xff1a;给定一张参考图像&#xff…

数据科学与爬虫技术学习笔记

数据科学与爬虫技术学习笔记 一、数据科学基础库 1. NumPy&#xff1a;数值计算的基石 NumPy 是 Python 科学计算的核心库&#xff0c;专为数组和矩阵操作设计&#xff0c;能大幅简化循环操作&#xff0c;提供丰富的数学函数。 核心优势&#xff1a;高效处理同类型元素的多维…

学习嵌入式之硬件——I2C

一、I2C1.定义内部集成电路的简称&#xff0c;半双工串行同步通信&#xff0c;是芯片和芯片之间的通信方式&#xff1b;通常只有一个主机&#xff0c;多个从机&#xff0c;采用主从应答的方式上图所示是IIC的总线的使用场景&#xff0c;所有挂载在IIC总线上的设备都有两根信号线…

使用websockt

封装websocktHooksimport { ref, onMounted, onUnmounted } from vue;/*** webSocket的Hooks* param {string} websocket链接地址* */ export function useWebSocket(url: string) {// 核心状态 const data: Ref<any> ref(null);//收到websocket返回的数据const socke…

Jmeter自定义脚本

目录 log&#xff1a;输出类 Label&#xff1a;你自定义的组件的名称 FileName&#xff1a;添加的脚本文件的文件名 Parameters&#xff1a;你传入的参数&#xff0c;是一个字符串 args&#xff1a;你传入的参数&#xff0c;是一个数组 Parameters和args的异同&#xff1…

飞算 JavaAI 电商零售场景实践:从订单峰值到供应链协同的全链路技术革新

目录 一、电商核心场景的技术攻坚 1.1 分布式订单系统的事务一致性设计 1.1.1 TCC 模式下的订单创建流程 1.1.2 订单状态机的可靠流转 1.2 高并发秒杀系统的架构设计 1.2.1 多级限流与流量削峰 1.2.2 库存防超卖机制 1.3 智能推荐与用户行为分析 1.3.1 用户行为实时采…

51单片机-51单片机介绍

51单片机介绍单片机简介什么是单片机呢&#xff1f;单片机是一种集成电路芯片&#xff0c;采用超大规模集成电路技术将中央处理器&#xff08;CPU&#xff09;、随机存储器&#xff08;RAM&#xff09;、只读存储器&#xff08;ROM&#xff09;、多种I/O口、中断系统、定时器/计…

8月AI面试工具测评:破解规模化招聘难题

金秋校招临近&#xff0c;企业面临“百万简历涌入VS面试官团队告急”的典型困境。传统线下面试效率低下、标准参差&#xff0c;难以应对短时间内爆发式的人才筛选需求。AI面试工具凭借自动化与智能化特性成为破局关键&#xff0c;但市面上产品良莠不齐——究竟哪款能兼顾效率与…

Debian新一代的APT软件源配置文件格式DEB822详解

Debian 的 DEB822 格式详解&#xff1a;新一代 APT 源配置 DEB822 是一种基于 RFC 822 数据格式的配置文件语法&#xff0c;Debian 新一代的 APT 软件源配置文件格式就采用了 DEB822。DEB822 格式从 Debian 11 (Bullseye) 开始被引入&#xff0c;并在 Debian 12 (Bookworm) 中成…

实战 AI8051U 音视频播放:USART-SPI→DMA-P2P→SPI+I2S 例程详解

视频P2P播放&#xff0c;时间计算&#xff1a;fps20,50ms 周期刷屏时间&#xff1a;160*80 一帧刷屏时间28.2ms帧间隔&#xff1a;50ms-28.2ms21.8ms音频双缓冲区交叉播放&#xff0c;利用视频播放帧间隔加载下一个缓冲区音频数据&#xff0c;时间计算&#xff1a;16000采样率 …

解释器模式C++

解释器模式&#xff08;Interpreter Pattern&#xff09;是一种行为型设计模式&#xff0c;它用于定义一种语言的语法规则&#xff0c;并构建一个解释器来解释该语言中的句子。这种模式适用于需要处理固定语法规则的场景&#xff0c;如表达式解析、配置文件解析等。 解释器模式…

debian 13 显示中文字体 不再显示菱形块 终端显示中文

找了很多坑。。其它就安装一下中文字体即可 。 apt install ttf-wqy-zenhei 之后测试命令 fc-list &#xff1a;langzh 显示了刚字体的路径和中文字即成功了。 rootdebian:~# dpkg-reconfigure locales 以上命令配置中文语言。 debian 12.11 安装 MySQL 下载配置文件 &am…

51单片机-驱动蜂鸣器模块教程

本章概述思维导图&#xff1a; 51单片机驱动蜂鸣器模块教程 蜂鸣器简介 蜂鸣器是一种将电信号转换为声音信号的电子元件&#xff0c;广泛应用于报警、提示、通知等场景。其核心原理基于压电效应或电磁感应&#xff1a;因此可分为两种类型蜂鸣器&#xff1a;压电式蜂鸣器和电磁…

常用Linux指令:Java/MySQL/Tomcat/Redis/Nginx运维指南

一、基础Linux指令1. 文件与目录操作ls -lh # 查看文件详情(人类可读格式) pwd # 显示当前目录路径 cd /path # 切换目录 mkdir dirname # 创建目录 rm -rf dirname # 强制删除目录 cp -r src dest # 递归复制目录 mv old new # 移动/重命…

小红书帖子评论的nodejs爬虫脚本

从小红书上爬取评论&#xff0c;但是目前还不能完全爬取子评论&#xff0c;使用GPT没能解决这个问题。后续博主可能会改进。或者如果你懂的话&#xff0c;可以在博主代码基础上改进。需要安装nodejs软件&#xff0c;部署环境变量。博主是在pycharm中运行的。代码无套路获取。自…

【iOS】多线程原理

目录 前言 基本概念及原理 线程、进程与队列 线程的定义&#xff1a; 进程的定义&#xff1a; 线程与进程之间的联系与区别&#xff1a; 线程和runloop的关系 影响任务执行速度的因素 多线程 多线程生命周期 线程池的原理 iOS中多线程的实现方式 线程安全问题 互斥…

药房发药的“时间密码”:同步时钟用药安全?

在医院的药房里&#xff0c;每一粒药片的流转都暗藏“时间密码”。从药品入库到患者服药&#xff0c;时间记录的精确性直接关乎生命安全。一旦时间数据出现偏差&#xff0c;轻则导致用药争议&#xff0c;重则引发医疗事故。近年来&#xff0c;随着医疗数字化进程加速&#xff0…