当前位置: 首页 > 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.dtcms.com/a/279412.html

相关文章:

  • TCL在芯片设计与验证中的应用实践
  • WinUI3开发_Combobox实现未展开时是图标下拉菜单带图标+文字
  • ConcurrentHashMap 原子操作详解:computeIfAbsent、computeIfPresent和putIfAbsent
  • 技术人生——第12集:思想为王,功能在后
  • (5)LangGraph4j框架ReActAgent实现
  • mit6.5840-lab4C-Snapshot-25Summer
  • Java Stream流详解
  • 文心一言 4.5 开源深度剖析:中文霸主登场,开源引擎重塑大模型生态
  • C++11 std::is_permutation:从用法到原理的深度解析
  • 什么是延迟双删
  • 算法训练营day18 530.二叉搜索树的最小绝对差、501.二叉搜索树中的众数、236. 二叉树的最近公共祖先
  • 通过 ip a 查看网络接口名
  • 【算法】贪心算法:摆动序列C++
  • 2025js——面试题(8)-http
  • Linux 系统下的 Sangfor VDI 客户端安装与登录完全攻略 (CentOS、Ubuntu、麒麟全线通用)
  • 程序跑飞是什么?
  • 核电概念盘中异动,中核科技涨停引领板块热度
  • 物联网技术促进能量收集创新应用落地
  • 第一章编辑器开发基础第一节绘制编辑器元素_4输入字段(4/7)
  • 【一维 前缀和+差分】
  • 互斥锁与同步锁
  • IIS错误:Service Unavailable HTTP Error 503. The service is unavailable.
  • Unity Shader 预热与缓存优化
  • Unity中HumanBodyBones骨骼对照
  • 卡在“pycharm正在创建帮助程序目录”
  • 笔试——Day6
  • 达梦国产数据库安装
  • React Hook 详解:原理、执行顺序与 useEffect 的执行机制
  • 切比雪夫多项式
  • leetcode 1290. 二进制链表转整数 简单