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

前端-Vue的生命周期和生命周期的四个阶段

       

目录

1) 创建阶段(beforeCreate → created)

2) 挂载阶段(beforeMount → mounted)

3) 更新阶段(beforeUpdate → updated)

4) 销毁阶段(beforeDestroy → destroyed)


当我们在使用Vue框架的时候,会产生一个问题:

                什么时候可以发送初始化渲染请求?(越早越好)

                什么是时候可以开始操作dom?(至少dom得渲染出来)

        Vue的生命周期:一个Vue实例从创建到销毁的过程。

        生命周期四个阶段:1.创建 2.挂载 3.更新 4.销毁

1) 创建阶段(beforeCreate → created)

发生了什么:

  • 实例初始化,注入(provide/inject)、事件系统搭好。

  • 到了 createddata/computed/methods/props 都已可用,但 DOM/$el/$refs 还没生成

推荐做的事:

  • 初始化纯数据状态、同步准备工作。

  • 发起数据请求(常见选择),不依赖 DOM 时放在 created 更快。

  • 读取路由参数、发起 store 初始化。

避免:

  • beforeCreate/created 里访问 this.$el / this.$refs / DOM。

  • SSR 场景中直接用 window/document(请做环境判断)。

示例:

created() {// 可用:this.xxx、this.$store、this.$routerthis.loadList(); // 不依赖 DOM 的异步请求
}

2) 挂载阶段(beforeMount → mounted)

发生了什么:

  • 首次渲染 Virtual DOM → 真实 DOM,$el/$refs 就绪。

推荐做的事:

  • 任何依赖 DOM 的操作:测量元素宽高、获取滚动高度、聚焦输入框。

  • 初始化三方 DOM 插件(ECharts、Map、Swiper…)。

  • 需要拿到真实尺寸/位置信息 的逻辑放这里。

避免:

  • mounted 里频繁改数据导致立刻再次更新(必要时用 this.$nextTick)。

示例:

mounted() {this.chart = echarts.init(this.$refs.bar);this.chart.setOption(this.option);// 下一轮 DOM 更新后再拿最新布局this.$nextTick(() => {const h = this.$refs.panel.offsetHeight;// ...基于真实尺寸的逻辑});
}

3) 更新阶段(beforeUpdate → updated)

发生了什么:

  • 响应式数据变化触发重新渲染。

  • beforeUpdate:数据已改,DOM 尚未 patch。

  • updated:DOM patch,与数据同步完成。

推荐做的事:

  • 需要在 DOM 更新后读写布局 → 放 updatedthis.$nextTick

  • 更常见:使用 watcher 精准响应某个字段变化,而不是在 updated 里“大包大揽”。

避免:

  • updated 里再无条件改数据 → 造成无限更新循环

  • 把业务逻辑都塞在 updated(会很频繁触发)

示例(精确监听 + nextTick):

watch: {pageSize() {this.$nextTick(() => {// DOM 已与新 pageSize 对齐this.fixTableHeight();});}
}

4) 销毁阶段(beforeDestroy → destroyed)

发生了什么:

  • 即将解绑指令、事件、子组件,实例失去响应能力。

  • destroyed 后,this 还在,但别再改数据(无意义)。

推荐做的事:

  • 清理资源:定时器、addEventListener、消息订阅、WebSocket、EventBus、三方实例(ECharts.dispose)。

  • 取消未完成的请求(AbortController / axios cancel token)。

避免:

  • 遗漏清理 → 内存泄漏(列表/标签页切换尤甚)。

示例:

beforeDestroy() {clearInterval(this.timer);window.removeEventListener('resize', this.onResize);this.chart && this.chart.dispose();this.chart = null;
}

http://www.xdnf.cn/news/19811.html

相关文章:

  • 缠论笔线段画线,文华财经期货指标公式,好用的缠论指标源码
  • 特斯拉三代灵巧手:演进历程与核心供应链梳理
  • Spring AI调用sglang模型返回HTTP 400分析处理
  • 前端学习 10-2 :验证中的SV
  • Qt使用Maintenance添加、卸载组件(未完)
  • Java 技术支撑 AI 系统落地:从模型部署到安全合规的企业级解决方案(四)
  • 嵌入式学习 51单片机(2)
  • 【C++】string类完全解析与实战指南
  • centos 压缩命令
  • (二)文件管理-基础命令-mkdir命令的使用
  • Linux应用(1)——文件IO
  • 部署jenkins并基于ansible部署Discuz应用
  • 嵌入式|RTOS教学——FreeRTOS基础3:消息队列
  • Unity之Spine动画资源导入
  • 小游戏公司接单难?这几点原因与破局思路值得看看
  • 聚焦诊断管理(DM)的传输层设计、诊断服务器实现、事件与通信管理、生命周期与报告五大核心模块
  • RTSP流端口占用详解:TCP模式与UDP模式的对比
  • 面向深层语义分析的公理化NLP模型:理论可行性、关键技术与应用挑战
  • 大语言模型领域最新进展
  • 如何将JPG图片批量转为PDF?其实可用的方法有很多种
  • TC-2024《Fuzzy Clustering guided by Spectral Rotation and Scaling》
  • shell-awk命令详解(理论+实战)
  • 通过IDEA写一个服务端和一个客户端之间的交互
  • 解决通过南瑞加密网关传输文件和推送视频的失败的问题
  • PyTorch 面试题及详细答案120题(116-120)-- 综合应用与实践
  • 专项智能练习(音频基础)
  • 水泵运行组态监控系统御控物联网解决方案
  • 基于SpringBoot的旅游管理系统
  • 03 - HTML常用标签
  • Nano Banana 的 100 种用法 - AI 图像生成完整提示词宝典