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

vue中的生命周期钩子

vue中的生命周期钩子

Vue 组件的生命周期钩子分为以下几个阶段,以下是对 Vue 3 生命周期的详细说明(Vue 2 略有差异):

📌创建阶段(初始化)

1.beforeCreate

  • 调用时机:实例初始化后,数据观测和事件/配置之前
  • 特点
    • 无法访问datacomputedmethods
    • 常用于插件初始化
  • 示例
beforeCreate(){console.log(this.message)// undefined}

2.created

  • 调用时机:实例创建完成
  • 特点
    • 可以访问datamethodscomputed
    • 无法访问 DOM(模板未挂载)
    • 常用于 API 请求、数据初始化
  • 示例
created(){console.log(this.message)// 可访问this.fetchData()}

📌挂载阶段(DOM 渲染)

3.beforeMount

  • 调用时机:模板编译完成,但未挂载到 DOM
  • 特点
    • 模板已编译为渲染函数
    • 首次render函数即将被调用
  • 示例
beforeMount(){console.log('DOM 即将渲染')}

4.mounted

  • 调用时机:实例已挂载到 DOM
  • 特点
    • 可以访问 DOM 元素
    • 子组件不一定全部挂载完成
    • 常用于 DOM 操作、第三方库初始化
  • 示例
mounted(){console.log(this.$el)// 访问 DOMthis.initChart()// 初始化图表库}

📌更新阶段(响应式数据变化)

5.beforeUpdate

  • 调用时机:数据改变后,DOM 重新渲染前
  • 特点
    • 可以获取更新前的 DOM 状态
    • 适合移除事件监听器等操作
  • 示例
beforeUpdate(){console.log('数据更新前')}

6.updated

  • 调用时机:DOM 已重新渲染完成
  • 特点
    • 可以执行依赖新 DOM 的操作
    • 避免在此修改状态(可能导致无限循环)
  • 示例
updated(){console.log('DOM 更新完成')// 谨慎操作,可能触发再次更新}

📌卸载阶段(组件销毁)

7.beforeUnmount(Vue 3)/beforeDestroy(Vue 2)

  • 调用时机:实例销毁前
  • 特点
    • 实例仍完全可用
    • 适合清理定时器、取消订阅、移除事件监听
  • 示例
beforeUnmount(){clearInterval(this.timer)eventBus.off('event',this.handler)}

8.unmounted(Vue 3)/destroyed(Vue 2)

  • 调用时机:实例销毁后
  • 特点
    • 所有绑定已解除,子实例已销毁
    • 无法再访问实例
  • 示例
unmounted(){console.log('组件已销毁')}

📌其他特殊钩子

9.errorCaptured

  • 调用时机:捕获后代组件错误时
  • 特点
    • 可以返回false阻止错误继续向上传播
  • 示例
errorCaptured(err,instance,info){this.error=errreturnfalse// 阻止传播}

10.renderTracked(Vue 3 开发模式)

  • 调用时机:响应式依赖被跟踪时
  • 用途:调试响应式依赖

11.renderTriggered(Vue 3 开发模式)

  • 调用时机:响应式依赖触发重新渲染时
  • 用途:调试重新渲染原因

12.activated/deactivated

  • 调用时机<keep-alive>缓存组件激活/停用时
  • 示例
activated(){this.startPolling()// 恢复轮询},deactivated(){this.stopPolling()// 停止轮询}

📊生命周期流程图

创建阶段: new Vue() → beforeCreate → 响应式初始化 → created 挂载阶段: created → beforeMount → 编译模板 → 创建VDOM → 挂载DOM → mounted 更新阶段: 数据变化 → beforeUpdate → 重新渲染 → updated 卸载阶段: beforeUnmount → 卸载组件 → unmounted 缓存组件: deactivated → activated (当使用keep-alive时)

🎯使用建议

  1. 数据请求createdmounted

    • SSR 用created,客户端用mounted
  2. DOM 操作mountedupdated

    • 注意updated可能多次触发
  3. 清理资源beforeUnmount

    • 定时器、事件监听、订阅等
  4. 避免副作用

    • 不要在updated中修改依赖数据
    • 避免在beforeUpdate中同步更改状态

🔄Vue 2 vs Vue 3 差异

Vue 2Vue 3说明
beforeDestroybeforeUnmount更名
destroyedunmounted更名
-renderTracked新增调试钩子
-renderTriggered新增调试钩子

💡组合式 API 中的生命周期

import{onMounted,onUnmounted}from'vue'setup(){// 对应 created 和 beforeCreate 的代码直接写在 setup 中onMounted(()=>{console.log('组件已挂载')})onUnmounted(()=>{console.log('组件将卸载')})}

理解这些生命周期钩子有助于在正确的时机执行相应的逻辑,避免常见错误并优化性能。

http://www.jsqmd.com/news/262730/

相关文章:

  • 强烈安利!本科生必用TOP9一键生成论文工具深度测评
  • 软件测试文档,生鲜订购系统软件测试报告万字文档,生鲜订购系统(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码
  • 软件测试报告万字文档,博客系统(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码
  • 瑞士康达olt常规维修命令
  • 软件测试百度官网测试软件测试百度官网测试(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码
  • VXLAN技术深度解析:数据中心大二层网络的最优解
  • 软件测试文档多多选题可选(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码
  • 学长亲荐2026自考AI论文工具TOP10:选对工具轻松过答辩
  • 软件测试文档宿舍管理系统软件测试报告万字文档,宿舍管理系统(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码
  • 基于python农产品销售数据分析可视化系统销量数据分析(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码
  • 基于PLC的恒压供水控制系统西门子s7-1200变频恒压供水系统程序(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码
  • 如何在 Python 中实现上下文管理器?
  • Typora 1.9.5:一款让你爱上 Markdown 写作的编辑器
  • Olink蛋白质组学:揭示生命过程的新视角
  • mysql数据库笔记1
  • CVE-2025-1094:PostgreSQL SQL 注入漏洞深度解析
  • 远程仓库已经删除的分支,为什么在本地git branch -a还能看到
  • 2026年GEO优化要看什么?这份深度评测与口碑排名推荐给你答案 - 品牌推荐
  • 江苏华大实力怎么样?性价比高的公司排名出炉 - 工业品牌热点
  • 如何挑选靠谱的GEO优化公司?2026年最新深度评测与综合排名推荐 - 品牌推荐
  • 深圳有名的AI搜索优化专业公司哪家性价比高,南方网通上榜 - 工业品牌热点
  • 完整教程:分布式锁实现方案Redis和Zookeeper对比实战
  • 【Java核心】:一文搞懂包装类、泛型与PECS原则
  • 文档编写
  • 合肥知名的搬家企业排行榜,专业公司都有谁? - 工业品牌热点
  • 2026祛痘精华实测排行榜:10款高分款实测,舒缓消炎修护屏障淡化痘印高口碑推荐 - 速递信息
  • rosbag2相关基础以及机制
  • 项目介绍
  • 一个致力于为 C# 程序员提供更佳的编码体验和效率的 Visual Studio 扩展插件
  • Playwright与Cucumber集成:行为驱动开发(BDD)实践