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

Vue 生命周期钩子总结


Vue 生命周期钩子总结

Vue 组件的生命周期钩子允许在组件不同阶段执行自定义逻辑。以下是各阶段的钩子函数及其用途、触发时机和注意事项:


1. 生命周期阶段概览

Vue 组件的生命周期分为四个主要阶段:

  1. 创建(Creation):初始化数据观测、事件等。
  2. 挂载(Mounting):将组件挂载到 DOM。
  3. 更新(Updating):响应数据变化,重新渲染。
  4. 销毁(Destruction):销毁组件实例,清理资源。

2. Vue2 生命周期钩子

钩子函数及触发顺序
钩子函数触发时机用途
beforeCreate实例初始化后,数据观测/事件配置前初始化非响应式变量(如插件配置)
created实例创建完成,数据观测/事件配置完成发起异步请求、访问响应式数据
beforeMount挂载开始前(编译模板,生成虚拟 DOM)极少使用
mounted实例挂载到 DOM 后操作 DOM、初始化第三方库
beforeUpdate数据变化后,重新渲染前获取更新前的 DOM 状态
updated数据变化导致重新渲染完成操作更新后的 DOM
beforeDestroy实例销毁前清理定时器、取消事件监听
destroyed实例销毁后极少使用
代码示例
export default {beforeCreate() {console.log('beforeCreate:数据未初始化');},created() {console.log('created:数据已初始化,可访问 this.data');},beforeMount() {console.log('beforeMount:模板编译完成,未挂载到 DOM');},mounted() {console.log('mounted:DOM 已挂载');},beforeUpdate() {console.log('beforeUpdate:数据变化,DOM 更新前');},updated() {console.log('updated:DOM 更新完成');},beforeDestroy() {console.log('beforeDestroy:实例销毁前');},destroyed() {console.log('destroyed:实例已销毁');}
}

3. Vue3 生命周期钩子变化

Vue3 保留了 Vue2 的生命周期钩子,但命名略有调整,并新增了 setup 函数作为组合式 API 的入口。

主要变化
  1. 钩子函数前缀
    • Vue2 的 beforeDestroy → Vue3 的 beforeUnmount
    • Vue2 的 destroyed → Vue3 的 unmounted
  2. 组合式 API
    • setup() 中使用生命周期钩子需通过 onX 函数(如 onMounted)。
Vue3 钩子对照表
Vue2 钩子Vue3 钩子说明
beforeCreatesetup()setup() 替代
createdsetup()setup() 替代
beforeMountonBeforeMount挂载前执行
mountedonMounted挂载后执行
beforeUpdateonBeforeUpdate更新前执行
updatedonUpdated更新后执行
beforeDestroyonBeforeUnmount卸载前执行
destroyedonUnmounted卸载后执行
Vue3 组合式 API 示例
import { onMounted, onUnmounted } from 'vue';export default {setup() {onMounted(() => {console.log('mounted:DOM 已挂载');});onUnmounted(() => {console.log('unmounted:实例已销毁');});}
}

4. 常见使用场景

钩子函数典型场景
created发起 API 请求、初始化非 DOM 相关数据
mounted操作 DOM、初始化图表库(如 ECharts)
beforeUpdate获取更新前的滚动位置
updated数据变化后调整 UI 布局
beforeUnmount清除定时器、取消全局事件监听

5. 注意事项

  1. 避免在 created/mounted 中阻塞主线程
    异步操作(如 API 请求)应使用 async/await 或 Promise,避免页面卡顿。
  2. 不要在 updated 中修改状态
    可能导致无限循环更新。
  3. Vue3 的 setup 替代了 beforeCreate/created
    所有初始化逻辑应在 setup() 中完成。
  4. SSR 中不可用的钩子
    beforeMountmountedbeforeUpdateupdated 在服务端渲染时不会执行。

6. 特殊场景钩子

activateddeactivated
  • 用途:用于 <keep-alive> 缓存的组件,监听组件的激活/停用状态。
  • 示例
    export default {activated() {console.log('组件被激活(从缓存中恢复)');},deactivated() {console.log('组件被停用(进入缓存)');}
    }
    
错误处理钩子(Vue2.5+)
  • errorCaptured:捕获子组件树中的错误,可用于全局错误上报。
    export default {errorCaptured(err, vm, info) {console.error('捕获到错误:', err);return false; // 阻止错误继续向上传播}
    }
    

总结

  • Vue2 生命周期钩子beforeCreatecreatedbeforeMountmountedbeforeUpdateupdatedbeforeDestroydestroyed
  • Vue3 主要变化:重命名销毁阶段钩子,引入组合式 API 的 onX 函数。
  • 核心原则
    • 数据初始化created(Vue2)或 setup(Vue3)。
    • DOM 操作mounted 后执行。
    • 资源清理beforeUnmount/beforeDestroy 中完成。

理解生命周期钩子的执行顺序和适用场景,有助于编写高效、可维护的 Vue 组件。

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

相关文章:

  • 【前缀和 差分数组 数论】P6042 「ACOI2020」学园祭|省选-
  • 【DeepSeek认证】最好的MODBUS调试工具
  • 什么是数据链路层的CRC检测以及为什么要放到帧尾?
  • 民办生从零学C的第十二天:指针(1)
  • 探秘Transformer系列之(31)--- Medusa
  • MySQL的数据类型
  • 从灰色地带走向阳光监管的漏洞产业
  • 运维实施27-Linux权限管理
  • 有源医疗器械的安规三项
  • 2025“钉耙编程”中国大学生算法设计春季联赛(8)10031007
  • sql学习笔记(四)
  • Java方法执行机制与入口点实现深度解析
  • 跨平台数据采集方案:淘宝 API 对接 React Native 实现移动端实时监控
  • docker镜像构建常用参数
  • [计算机科学#4]:二进制如何塑造数字世界(0和1的力量)
  • Linux虚拟机无法重启网络
  • 4G FS800DTU上传图像至巴法云
  • DDD是什么?电商系统举例
  • 今日行情明日机会——20250428
  • NdrpGetAllocateAllNodesContext函数分析之三个内存区域的联系
  • 每日一题(12)TSP问题的贪心法求解
  • params query传参差异解析及openinstall跨平台应用
  • EMC isilon/PowerScale 如何收集日志
  • 【SAP ABAP 获取采购申请首次审批时间】
  • 【LLM开发】Unigram算法
  • 可编程控制器应用
  • 瞄定「舱驾融合」,黑芝麻智能的智驾平权「芯」路径
  • 大数据应用开发与实战(1)
  • Git技巧:Git Hook,自动触发,含实战分享
  • 【C到Java的深度跃迁:从指针到对象,从过程到生态】第四模块·Java特性专精 —— 第十六章 多线程:从pthread到JMM的升维