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

vue2生命周期详解

1、什么是 Vue 生命周期

        Vue 生命周期(Lifecycle)是指 ​Vue 实例或组件从创建到销毁的整个过程,在这个过程中,Vue 会自动运行一些特定的函数,这些函数被称为 ​生命周期钩子(Lifecycle Hooks)​​ 或 ​生命周期函数

        可以把这些钩子函数理解为 Vue 实例在不同阶段提供的“回调函数”​,你可以在这些阶段插入自己的代码逻辑,比如:

  • 数据初始化
  • 发送网络请求
  • 操作 DOM
  • 清理定时器、取消事件监听等

2、Vue 2 生命周期流程图

        下面是 Vue 2 生命周期的主要阶段和钩子函数,按执行顺序排列:

        1 、创建阶段(Initialization)​       

                beforeCreate

                created

   2、​挂载阶段(DOM Insertion)​

                beforeMount

                mounted

        3、​更新阶段(Re-render / Data Change)​

                beforeUpdate

                updated

        4、销毁阶段(Teardown)

                beforeDestroy

                destroyed

注意:Vue 3 中生命周期钩子函数有所变化(比如 beforeDestroy 改为 beforeUnmount

3、Vue 2 生命周期钩子函数详解

1、创建阶段
        1、beforeCreate
  • 时机​:实例刚被创建,​数据观测 (data observer) 和事件/侦听器还未初始化​
  • ​特点​:
    • 不能访问 data 中的数据
    • 不能访问 methods 中的方法
    • 不能访问 DOM
  • ​用途​:一般很少使用
    beforeCreate() {console.log('beforeCreate:', this.message) // undefined
    }
    2、created
  • 时机​:实例已经创建完成,​数据观测已完成,属性和方法已设置,但 DOM 还未生成,$el 还不可用​
  • ​特点​:
    • 可以访问 data 中的数据
    • 可以调用 methods 中的方法
    • ​不能访问 DOM(this.$el 为 undefined)​​
  • ​用途​:
    • 初始化数据
    • ​发送异步请求获取数据(如调用 API)​​
    • 执行一些不需要 DOM 的初始化逻辑
      created() {console.log('created:', this.message) // 可访问 data// 推荐在这里发起异步请求,此时 data 已初始化,DOM 还未渲染axios.get('/api/user').then(res => {this.user = res.data})
      }
        3、beforeMount
  • 时机​:在挂载开始之前被调用,相关的 ​render 函数首次被调用,但 DOM 还未渲染到页面上​
  • ​特点​:
    • 模板已经编译完成
    • 但还没有挂载到页面上,this.$el 还不可见
  • ​用途​:很少使用
        4、mounted
  • 时机​:​实例已经挂载到 DOM 上,可以访问 this.$el,DOM 已经渲染完成​
  • ​特点​:
    • 可以操作 DOM(比如初始化第三方库:图表、轮播图等)
    • 可以访问 this.$refs
    • 也可以调用请求后台接口的方法
  • ​用途​:
    • 操作 DOM
    • 初始化需要 DOM 的插件(如 ECharts、Swiper)
    • 执行依赖于 DOM 的代码
      mounted() {console.log('DOM 已挂载', this.$el)// 可以安全地操作 DOM 或调用第三方库// 比如初始化 ECharts 图表const chart = echarts.init(this.$refs.chartDom)chart.setOption({...})
      }
       
2、更新阶段(当数据变化时触发)
        5、beforeUpdate   
  • 时机​:数据发生变化,​虚拟 DOM 重新渲染​ ​之前​
  • ​特点​:
    • 可以获取更新前的 DOM 状态
    • 但此时视图还未更新
  • ​用途​:一般较少使用,可用于某些特殊 DOM 操作
        6、 updated
  • 时机​:由于数据更改导致的 ​虚拟 DOM 重新渲染和打补丁之后​
  • ​特点​:
    • 组件 DOM 已经更新
    • 可以操作更新后的 DOM
  • ​用途​:
    • 操作更新后的 DOM(但要避免无限循环)
    • 注意:​不要在此钩子中修改数据,可能会导致无限循环更新

3、销毁阶段(组件销毁时)
        7、beforeDestroy (常用)
  • 时机​:​实例销毁之前调用​
  • ​特点​:
    • 实例仍然完全可用
    • ​适合做清理工作​
  • ​用途​:
    • 清除定时器
    • 移除事件监听
    • 取消网络请求
    • 销毁第三方库实例
      data() {return {timer: null}
      },created() {this.timer = setInterval(() => {console.log('定时运行中...')}, 1000)
      },beforeDestroy() {console.log('组件即将销毁')clearInterval(this.timer)  // 避免内存泄漏
      }
        8、destroyed
  • 时机:​实例销毁后调用​
  • ​特点​:
    • 所有的子组件也都被销毁
    • 组件已经从 DOM 中移除,所有绑定的事件、监听器都已被移除
  • ​用途​:收尾工作(一般较少使用)

4、钩子函数总结

钩子函数时机说明是否可访问 data/methods是否可访问 DOM常见用途
beforeCreate实例刚初始化,data 和 methods 还未初始化极少使用
created实例已创建,data 和 methods 可用,但 DOM 未生成初始化数据、发请求
beforeMount模板已编译,但尚未挂载到页面上很少使用
mounted实例已挂载到真实 DOM,可以操作 DOM操作 DOM、初始化插件
beforeUpdate数据变化,虚拟 DOM 重新渲染之前​❌(旧DOM)极少使用
updated数据变化导致 DOM 重新渲染之后​✅(新DOM)操作更新后的 DOM
beforeDestroy组件销毁前,实例仍可用,适合做清理工作清理定时器、事件、请求
destroyed组件已销毁,所有子组件也被销毁收尾工作

5、Vue 2 生命周期钩子函数与 Vue 3 对比

Vue 2Vue 3(Composition API)对应
beforeCreatesetup() 开始之前
createdsetup() 中
beforeMountonBeforeMount
mountedonMounted
beforeUpdateonBeforeUpdate
updatedonUpdated
beforeDestroyonBeforeUnmount
destroyedonUnmounted

注意:如果使用 Vue 3,生命周期钩子函数是通过 onXxx 形式使用,在 setup() 函数中导入调用。

http://www.dtcms.com/a/332657.html

相关文章:

  • Claude Opus 4.1深度解析:抢先GPT5发布,AI编程之王主动出击?
  • 【线上问题】1分钟学会如何定位 Java 应用 CPU 飙升问题
  • Spring中存在两个相同的Bean是否会报错?
  • Amazon Bedrock如何轻松实现复杂的生成式AI模型?
  • 纯C++实现halcon的threshold
  • 【Java EE进阶 --- SpringBoot】初识Spring(创建SpringBoot项目)
  • zynq代办事项
  • Vue 侦听器(watch 与 watchEffect)全解析2
  • 【100页PPT】数字化转型集团信息化总体解决方案(附下载方式)
  • Swift 实战:用最长递增子序列算法解“俄罗斯套娃信封”问题(LeetCode 354)
  • 日本服务器租用选哪个机房国内访问比较快?
  • 【LINUX网络】HTTP协议基本结构、搭建自己的HTTP简单服务器
  • 企微用户部门同步HRS系统
  • 电脑上练打字用什么软件最好:10款打字软件评测
  • 滑窗|贪心
  • Sonatype Nexus Repository Manager docker版本安装
  • [优选算法专题二滑动窗口——无重复字符的最长子串]
  • Linux应用层开发--线程
  • react性能优化之useRef和useState
  • Nginx性能优化与安全配置:打造高性能Web服务器
  • Unity:PlayerPrefs笔记
  • 标准电子邮件地址格式(RFC 5322 里的 mailbox 语法)
  • ABAP : 内表/工作区转JSON
  • Prometheus 监控 Kubernetes Cluster 最新极简教程
  • FreeRTOS多核支持
  • 从根本上解决MAC权限问题(关闭sip)
  • 汽车后雾灯色度难达标?OAS 软件精准解决破瓶颈
  • 图论Day3学习心得
  • Chrome插件开发实战:从架构到发布全流程
  • Docker Compose部署Clickhouse最新版