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

vue2/3生命周期使用建议

Vue 的生命周期是指一个 Vue 组件从创建到销毁的整个过程。理解并合理使用这些生命周期钩子函数,可以帮助你在合适的时机执行初始化、数据获取、DOM 操作、清理等任务。


一、Vue 生命周期概述

Vue 2.x 和 Vue 3.x(Composition API)生命周期大致相同,但写法略有不同:

阶段描述
beforeCreate / onBeforeMount实例刚被创建,属性和方法还未初始化
created / onMounted实例已经创建,属性已绑定,但 DOM 还未生成
beforeMount / onBeforeMount模板编译/挂载之前
mounted / onMounted模板编译/挂载之后,此时可以访问 DOM
beforeUpdate / onBeforeUpdate数据更新前调用,此时视图尚未更新
updated / onUpdated数据更新后调用,视图也已更新
beforeUnmount / onBeforeUnmount组件销毁前调用,用于清理事件、定时器等
unmounted / onUnmounted组件销毁后调用

二、生命周期使用建议与最佳实践

1. created / onMounted:数据初始化、接口请求

推荐使用:
  • createdonMounted 中进行数据初始化、接口请求。
  • 若需要操作 DOM,则建议在 mounted 中执行。
// Vue 2 Options API
export default {data() {return {users: []};},created() {this.fetchUsers();},methods: {async fetchUsers() {const res = await fetch('/api/users');this.users = await res.json();}}
}
// Vue 3 Composition API
import { onMounted } from 'vue';export default {setup() {onMounted(async () => {const res = await fetch('/api/users');// 处理数据...});}
}

⚠️ 注意:避免在 created 中操作 DOM,因为此时 DOM 尚未渲染。


2. mounted / onMounted:DOM 操作、第三方库初始化

推荐使用:
  • 初始化第三方组件(如 ECharts、地图、滑动插件等)
  • 获取真实 DOM 节点信息(如高度、宽度)
mounted() {this.$nextTick(() => {this.initChart();});
}
onMounted(() => {initChart(); // 假设是 ECharts 初始化
});

⚠️ 注意:如果数据异步加载完成后再渲染 DOM,建议在 watchwatchEffect 中处理 DOM 操作。


3. beforeUpdate / onBeforeUpdate:响应数据变化前

推荐使用:
  • 在数据变更前做一些准备工作(比如记录旧值)
onBeforeUpdate(() => {console.log('数据即将更新');
});

4. updated / onUpdated:响应数据变化后

推荐使用:
  • 数据更新后重新计算布局或重新渲染某些动态内容
  • 不要频繁触发更新逻辑,避免死循环
onUpdated(() => {console.log('数据已更新,可重新渲染视图');
});

⚠️ 注意:不要在 updated 中修改响应式数据,否则会再次触发更新,导致无限循环。


5. beforeUnmount / onBeforeUnmount:组件销毁前的清理工作

推荐使用:
  • 清除定时器、事件监听器、取消订阅
  • 手动释放内存资源
onBeforeUnmount(() => {clearInterval(timer);window.removeEventListener('resize', handleResize);
});

6. activated / deactivated(仅限 keep-alive 缓存组件)

推荐使用:
  • 当组件被 <keep-alive> 缓存时,这两个钩子用于控制激活/失活状态
activated() {console.log('组件被激活');
},
deactivated() {console.log('组件被缓存');
}

三、Vue 2 与 Vue 3 生命周期对比表

Vue 2 (Options API)Vue 3 (Composition API)说明
beforeCreate自动调用,不推荐手动使用
created数据初始化完成
beforeMountonBeforeMount挂载前
mountedonMounted挂载完成,可操作 DOM
beforeUpdateonBeforeUpdate数据更新前
updatedonUpdated数据更新后
beforeUnmountonBeforeUnmount销毁前
unmountedonUnmounted销毁后
activatedonActivated<keep-alive> 激活
deactivatedonDeactivated<keep-alive> 失活

四、常见问题 & 使用建议

场景建议生命周期
请求数据createdonMounted
初始化第三方组件mountedonMounted
监听窗口大小变化mounted 添加监听,beforeUnmount 移除监听
表单验证初始化mounted
定时器管理mounted 启动,beforeUnmount 清除
动态样式设置mountedupdated
组件销毁前清理beforeUnmount
缓存组件状态activated / deactivated

五、示例代码汇总(Vue 3 Composition API)

import { onMounted, onUpdated, onBeforeUnmount } from 'vue';export default {setup() {let timer = null;onMounted(() => {console.log('组件挂载完成');timer = setInterval(() => {console.log('定时器运行中...');}, 1000);});onUpdated(() => {console.log('组件更新完成');});onBeforeUnmount(() => {console.log('组件即将销毁');clearInterval(timer);});}
}
http://www.xdnf.cn/news/15371.html

相关文章:

  • SpringBoot JAR 反编译替换文件
  • OneCode3.0 MCPServer:注解驱动的AI原生服务架构与实践
  • Docker部署语音转文字(STT)服务并接入Home Assistant
  • C++11 std::is_permutation:从用法到原理的深度解析
  • androidstudio 高低版本兼容
  • 破解 VMware 迁移难题:跨平台迁移常见问题及自动化解决方案
  • 【第六节】docker可视化工具portainer安装
  • Angular 框架下 AI 驱动的企业级大前端应用开
  • Docker 拉取镜像并离线迁移至云桌面指南(以Redis为例)
  • 高安全前端架构:Rust-WASM 黑盒技术揭秘
  • 安全初级(一)
  • vscode 源码编译
  • CA-IS3082W 隔离485 收发器芯片可能存在硬件BUG
  • 如何连接 AWS RDS 数据库实例
  • React Three Fiber 实现 3D 模型视图切换、显隐边框、显隐坐标轴
  • 从欧洲杯初现到世俱杯之巅:海信冰箱的“保鲜传奇”
  • IIS错误:Service Unavailable HTTP Error 503. The service is unavailable.
  • 专题:2025机器人产业深度洞察报告|附136份报告PDF与数据下载
  • 如何将数据从一部手机传输到另一部手机?
  • CompletableFuture 源码解析
  • 微服务引擎 MSE 及云原生 API 网关 2025 年 3 月产品动态
  • CentOS 安装jenkins笔记
  • DiffDet4SAR——首次将扩散模型用于SAR图像目标检测,来自2024 GRSL(ESI高被引1%论文)
  • 深入浅出Kafka Broker源码解析(下篇):副本机制与控制器
  • 总结一下找素数的三种方法
  • 【Bluedroid】蓝牙协议栈enable流程深度解析
  • 若依(RuoYi)框架项目结构全解析
  • [Dify]-进阶1- Dify 支持的多种 AI 模型解析与选择建议
  • Linux修炼:自动化构建make/Makefile
  • sshpass原理详解及自动化运维实践