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

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.lryc.cn/news/587876.html

相关文章:

  • hive的相关的优化
  • Linux 系统管理基础教程
  • 图像分割论文中的评价指标
  • 从零实现一个基于 mem0的具有长期记忆的Text2SQL代理
  • R 语言科研绘图第 64 期 --- 哑铃图
  • 当前(2024-07-14)视频插帧(VFI)方向的 SOTA 基本被三篇顶会工作占据,按“精度-速度-感知质量”三条线总结如下,供你快速定位最新范式
  • 设计模式》》门面模式 适配器模式 区别
  • js与vue基础学习
  • Linux 基础命令详解:从入门到实践(1)
  • 基于Hadoop的竞赛网站日志数据分析与可视化(上)
  • STM32介绍和GPIO
  • Spring Boot启动原理:从main方法到内嵌Tomcat的全过程
  • Datawhale AI夏令营-基于带货视频评论的用户洞察挑战赛
  • [Python] -实用技巧4-Python中浅拷贝与深拷贝的区别详解
  • 工业软件加密锁复制:一场技术与安全的博弈
  • 借助DeepSeek编写输出漂亮表格的chdb客户端
  • 终端安全最佳实践
  • IIS错误:Service Unavailable HTTP Error 503. The service is unavailable.
  • SpringAi笔记
  • OpenCV 视频处理与摄像头操作详解
  • MySQL Innodb Cluster配置
  • 【CV综合实战】基于深度学习的工业压力表智能检测与读数系统【3】使用OpenCV读取分割后的压力表读数
  • DiffDet4SAR——首次将扩散模型用于SAR图像目标检测,来自2024 GRSL(ESI高被引1%论文)
  • vue-v-model进阶-ref-nextTick
  • 网络安全核心定律
  • 5G 到 6G通信技术的革新在哪里?
  • libimagequant windows 编译
  • 基于Python的就业数据获取与分析预测系统的设计与实现
  • Boost.Asio 异步写:为什么多次 async_write_some 会导致乱序,以及如何解决
  • 机器学习中的朴素贝叶斯(Naive Bayes)模型