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

Vue的生命周期有哪些及执行机制?

Vue.js中,**生命周期(Lifecycle)**指的是:
一个 Vue 组件从创建 → 挂载 → 更新 → 销毁的整个过程。在这些阶段,Vue 会自动调用对应的生命周期钩子函数(Lifecycle Hooks),开发者可以在这些函数中执行逻辑,比如请求数据、操作 DOM 等。

Vue 不同版本生命周期略有区别,最常见的是Vue2Vue3。先以Vue2为主说明执行机制。


一、Vue 生命周期流程(Vue2)

Vue 生命周期主要分为4个阶段

阶段生命周期钩子
创建阶段beforeCreate → created
挂载阶段beforeMount → mounted
更新阶段beforeUpdate → updated
销毁阶段beforeDestroy → destroyed

二、生命周期执行顺序

完整执行顺序如下:

beforeCreate created beforeMount mounted beforeUpdate updated beforeDestroy destroyed

执行机制可以理解为:

初始化 ↓ 创建实例 ↓ 挂载DOM ↓ 数据更新 ↓ 组件销毁

三、各生命周期详解

1 beforeCreate(创建前)

特点

  • Vue实例刚创建

  • data、methods 还没初始化

  • 不能访问 data

beforeCreate() { console.log(this.data) // undefined }

常见用途

基本不用。


2 created(创建完成)

特点

  • data、methods 已初始化

  • 可以访问 data

  • DOM 还没生成

created() { console.log(this.msg) }

常见用途

  • 请求接口

  • 初始化数据

  • 启动定时器

例如:

created(){ this.getList() }

3 beforeMount(挂载前)

特点

  • 模板编译完成

  • DOM 还没渲染到页面

一般很少使用。


4 mounted(挂载完成)

特点

  • DOM 已经生成

  • 可以操作 DOM

mounted() { console.log(this.$el) }

常见用途

  • DOM操作

  • 第三方库初始化

例如:

  • ECharts

  • Swiper

mounted(){ this.initChart() }

5 beforeUpdate(更新前)

data 数据改变时触发。

特点

  • 数据更新

  • DOM 还没更新


6 updated(更新后)

DOM 更新完成。

updated(){ console.log("页面已更新") }

注意:

不要在 updated 里修改 data,否则会死循环。


7 beforeDestroy(销毁前)

组件即将销毁。

常见用途

  • 清除定时器

  • 移除事件监听

beforeDestroy(){ clearInterval(this.timer) }

8 destroyed(销毁后)

组件已经被销毁。

  • 事件监听移除

  • 子组件销毁

  • DOM移除


四、Vue 生命周期执行机制(核心原理)

Vue 生命周期的本质流程:

new Vue() ↓ 初始化生命周期 ↓ 初始化事件 ↓ 初始化数据 ↓ created ↓ 编译 template → render ↓ 生成 Virtual DOM ↓ beforeMount ↓ 渲染真实 DOM ↓ mounted ↓ 数据变化 ↓ Virtual DOM diff ↓ 更新 DOM ↓ updated ↓ 组件销毁 ↓ beforeDestroy ↓ destroyed

这里涉及两个核心机制:

1 虚拟DOM(Virtual DOM)

Vue 使用Virtual DOM diff 算法来更新页面,而不是直接操作 DOM,提高性能。


2 响应式系统

当 data 变化时:

data变化 ↓ 触发setter ↓ 通知Watcher ↓ 重新render ↓ 更新DOM

五、Vue3 生命周期(对比)

Vue.js中生命周期改为:

Vue2Vue3
beforeCreatesetup
createdsetup
beforeMountonBeforeMount
mountedonMounted
beforeUpdateonBeforeUpdate
updatedonUpdated
beforeDestroyonBeforeUnmount
destroyedonUnmounted

示例:

import { onMounted } from "vue" onMounted(()=>{ console.log("组件已挂载") })

六、面试高频总结(很重要)

面试常问:

1 生命周期顺序

beforeCreate created beforeMount mounted beforeUpdate updated beforeDestroy destroyed

2 created 和 mounted 区别

createdmounted
DOM未生成DOM已生成
可以请求接口可以操作DOM

3 哪个生命周期请求接口?

一般在created 或 mounted

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

相关文章:

  • 打开风电数据文件的瞬间,十几个G的CSV文件直接把同事的Excel卡崩了。这种真实数据就像没过滤的自来水,直接喝肯定窜稀。咱们先来点硬核预处理
  • OLED手机屏幕狂闪绿线用激光修复机轻松解决
  • 中国互联网大厂新产品增长解密
  • 三大主流数据库SQL注入差异详解,实战避坑不踩雷
  • 基于单片机的水流量控制系统(有完整资料)
  • GPT-5.4 正式发布后,普通开发者最该关注的不是更强,而是更稳、更省、更能接进工作流
  • 第六篇:【硬件工程师筑基系列 1-6】信号基础入门 | 模拟信号 vs 数字信号,硬件工程师必懂的核心概念
  • 从像素到数据库:手搓一个车牌识别系统
  • 功能型润滑油源头厂家
  • SQL注入实战避坑指南,解决渗透测试高频报错与失效问题
  • 告别格式内卷!PaperXie 格式排版板块实测:4000 + 高校模板重构毕业论文排版效率
  • 17届蓝桥杯嵌入式赛道开发板外设使用教程——按键、蜂鸣器、LCD屏幕
  • 机关智慧食堂后勤管理系统__Python django flask
  • 隧道能见度检测器:守护隧道安全的“火眼金睛”
  • 那就随便说说
  • Carsim联合仿真模型验证:十四自由度车辆动力学模型的应用
  • 2026 第八批 “小巨人” 申报收官在即 评审核心导向升级
  • 互联网大厂Java求职者面试实战:严肃面试官与搞笑程序员谢飞机的故事
  • 逆向新手之攻防世界--key
  • **Gemini2.5Pro去AI味2025指南,打造自然流畅的文本生成体验**
  • CUDA graph 简析
  • 基于微信小程序的课程作业管理系统[小程序]-计算机毕业设计源码+LW文档
  • 别死记硬背!Java的CountDownLatch 核心原理:AQS state 才是关键
  • 知识体系——MCP(四)demo(2)开发mcp client
  • OWASP Top10 2021 完整版:与 SAST 适配的深度解析
  • Rocky Linux 10 上搭建 社区版 GitLab CE
  • 2026年 智能制造实训设备厂家推荐排行榜:高校教学、模拟药厂、生产线实训平台与系统装置一站式解决方案 - 品牌企业推荐师(官方)
  • g更改linux root密码
  • LeetCode 76. 最小覆盖子串(详细技术解析)
  • 虚拟同步发电机(VSG)孤岛与并网的Simulink(2019a)仿真模型搭建与探索