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

前端八股Vue---生命周期函数

目录

一、Vue 2 vs Vue 3 生命周期对比

二、图解Vue3生命周期

三、为什么组合式 API 没有 beforeCreate 和 created?

四、created 详解

3.1 执行时机

3.2 能做什么?

3.3 不能做什么?

五、mounted 详解

4.1 执行时机

4.2 能做什么?

Q1:Vue 3 有哪些生命周期函数?

Q2:Vue 2 和 Vue 3 生命周期有什么区别?

Q3:onMounted 和 onUpdated 有什么区别?

Q4:created 和 mounted 的区别?

Q5:什么时候用 created?什么时候用 mounted?

Q6:created 和 mounted 都能发请求,有什么区别?


一、Vue 2 vs Vue 3 生命周期对比

Vue 2Vue 3变化
beforeCreate❌ 移除组合式 API 中不需要
created❌ 移除组合式 API 中不需要
beforeMountonBeforeMount名称变化
mountedonMounted名称变化
beforeUpdateonBeforeUpdate名称变化
updatedonUpdated名称变化
beforeDestroyonBeforeUnmount名称变化(destroy → unmount)
destroyedonUnmounted名称变化(destroyed → unmounted)
errorCapturedonErrorCaptured名称变化

二、图解Vue3生命周期

┌─────────────────────────────────────────────────────────────┐ │ Vue 3 生命周期流程图 │ │ │ │ <script setup> 执行 │ │ ↓ │ │ onBeforeMount ← 挂载前 │ │ ↓ │ │ onMounted ← 挂载完成(可以操作 DOM) │ │ ↓ │ │ 数据变化 │ │ ↓ │ │ onBeforeUpdate ← 更新前 │ │ ↓ │ │ onUpdated ← 更新完成 │ │ ↓ │ │ 组件卸载 │ │ ↓ │ │ onBeforeUnmount ← 卸载前(清理工作) │ │ ↓ │ │ onUnmounted ← 卸载完成 │ │ │ └─────────────────────────────────────────────────────────────┘

三、为什么组合式 API 没有 beforeCreate 和 created?

<script setup> // 这个区域里的代码,就相当于在 created 阶段执行 // 所以不需要单独的 beforeCreate 和 created 钩子 import { ref, onMounted } from 'vue' // 这里的代码相当于 created const count = ref(0) const message = ref('Hello') // 这个相当于 mounted onMounted(() => { console.log('DOM 已挂载') }) </script>

四、created 详解

3.1 执行时机

组件实例刚创建好,数据初始化完成,但页面还没渲染。

export default { data() { return { message: 'Hello', users: [] } }, created() { // 此时可以访问 data、props、methods console.log(this.message) // 'Hello' ✅ console.log(this.users) // [] ✅ this.fetchData() // 可以调用 methods ✅ // 但拿不到 DOM console.log(this.$el) // undefined ❌ document.getElementById('app') // 找不到 ❌ } }

3.2 能做什么?

能做说明
✅ 访问data数据已初始化
✅ 访问props父组件数据已传入
✅ 调用methods方法已挂载
✅ 发送请求获取后端数据
✅ 设置定时器初始化定时任务
✅ 访问computedwatch计算属性和侦听器已就绪

3.3 不能做什么?

不能做原因
❌ 操作 DOMDOM 还没渲染
❌ 获取元素宽高元素不存在
❌ 初始化需要 DOM 的插件ECharts、Swiper 等需要 DOM 容器

五、mounted 详解

4.1 执行时机

组件已经渲染到页面上,DOM 已生成,可以安全操作 DOM。

export default { mounted() { // 此时可以访问 DOM console.log(this.$el) // DOM 元素 ✅ console.log(this.$refs.box) // ref 引用 ✅ // 可以操作 DOM const height = this.$el.offsetHeight // 获取高度 ✅ this.$refs.input.focus() // 聚焦输入框 ✅ } }

4.2 能做什么?

能做说明
✅ 操作 DOM获取、修改 DOM 元素
✅ 获取元素尺寸offsetWidthgetBoundingClientRect()
✅ 初始化图表ECharts、Three.js 等
✅ 初始化第三方库Swiper、DatePicker 等
✅ 聚焦输入框input.focus()
✅ 发送请求也可以,但更推荐 created

Q1:Vue 3 有哪些生命周期函数?

答:

  • onBeforeMountonMounted

  • onBeforeUpdateonUpdated

  • onBeforeUnmountonUnmounted

  • onErrorCaptured

注意:组合式 API 中没有beforeCreatecreated,因为<script setup>中的代码就相当于在created阶段执行。

Q2:Vue 2 和 Vue 3 生命周期有什么区别?

答:

  1. beforeDestroyonBeforeUnmount

  2. destroyedonUnmounted

  3. 组合式 API 中移除了beforeCreatecreated

  4. 所有生命周期函数前加上on前缀

Q3:onMounted 和 onUpdated 有什么区别?

答:

  • onMounted:组件首次挂载完成后执行,只执行一次

  • onUpdated:组件每次更新后执行,会执行多次

Q4:created 和 mounted 的区别?

答:

  • created:组件实例创建完成,数据已初始化,但 DOM 还未渲染,不能操作 DOM

  • mounted:组件已挂载到页面,DOM 已生成,可以安全操作 DOM

两者都可以发请求,但操作 DOM 相关的代码(如初始化图表、获取元素尺寸)必须放在 mounted。

Q5:什么时候用 created?什么时候用 mounted?

答:

  • created:只需要初始化数据、发请求、设置定时器,不涉及 DOM 操作

  • mounted:需要操作 DOM、获取元素尺寸、初始化第三方库(ECharts、Swiper)

Q6:created 和 mounted 都能发请求,有什么区别?

答:

  • created:发请求更早,数据回来时 DOM 可能还没渲染,但不影响数据更新

  • mounted:发请求稍晚,但能确保 DOM 已存在

两者都可以,但更推荐在 created 发请求,可以更早获取数据。

http://www.jsqmd.com/news/648078/

相关文章:

  • 别再只会调PWM占空比了!手把手教你用Linux thermal子系统自动控制风扇转速
  • sdut-软件测试-黑盒测试2
  • 一套在线监测系统,轻松管好16个变压器室
  • 微信小程序里用H5预览PDF,我为什么放弃了原生组件选了pdf.min.js?
  • S32K144外部中断实战:用按键控制LED,手把手教你避开中断标志位清除的坑
  • 汽车c语言是什么?
  • 精通 Agent Skill:构建高效 AI 技能的完整指南
  • Zotero Better Notes:如何用3个步骤构建你的学术知识网络?
  • 2026年安卓APP安全加固公司哪家好?从技术、性能到合规的深度选型指南
  • 2026年3月老板桌源头厂家推荐,老板桌/电动老板椅/新中式实木家具/智能办公椅/休闲办公沙发,老板桌厂家哪个好 - 品牌推荐师
  • 揭秘多模态餐饮推荐系统落地难题:从BERT-Vision融合到实时推理延迟压降至89ms的实战路径
  • Flutter-BluetoothDevice库源码
  • 联邦学习落地金融风控:当银行遇到电商,如何在不共享数据的前提下联合建模?
  • Python自动化配置管理:告别配置文件地狱
  • 别再裸奔了!给若依前后端分离项目加上AES接口加密(Vue3 + Spring Boot保姆级配置)
  • DeepSeek角色扮演指令终极指南:解锁AI自由对话新境界
  • C 语言教程
  • 双系统安装——爽哉爽哉
  • 基于深度学习的苹果叶片病虫害识别系统,resnet50,vgg16,resnet34【pytorch框架,python源码】
  • OpenClaw没凉,只是证明了90%的人并不需要AI Agent
  • AI编程≠Vibe Coding:6种模式一次讲清楚
  • 计算机网络之TCP和UDP的底层机制
  • 生成式AI数据飞轮构建:从0到规模化复利增长的6个关键杠杆(附某金融大模型真实飞轮增速曲线)
  • Flutter 开源鸿蒙动效实战:全场景动效集成精简指南
  • MySQL Filesort
  • 【限时解禁】SITS2026评测套件V1.0完整数据集+评估Pipeline(含中文细粒度标注子集)
  • 快速掌握 FastAPI 路由:从基础到进阶
  • Apache Tomcat 紧急修复多个漏洞
  • ViGEmBus深度解析:Windows内核级游戏控制器虚拟化架构揭秘
  • 5篇2章12节:诊断试验准确性研究与多阈值Meta分析方法(下篇:可视计算)