news 2026/4/23 12:31:07

vue中的生命周期钩子

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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('组件将卸载')})}

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

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/23 11:27:49

【Java核心】:一文搞懂包装类、泛型与PECS原则

一、包装类 1.1 基本类型的痛点 Java 是一种面向对象的语言&#xff0c;但为了性能&#xff0c;保留了 int、double 等 8 种基本数据类型。然而&#xff0c;Java 的集合框架&#xff08;如 ArrayList&#xff09;要求所有存入的元素必须是对象&#xff08;引用类型&#xff09;…

作者头像 李华
网站建设 2026/4/22 17:53:49

Python旅行社信息导游管理系统

目录Python旅行社信息导游管理系统的摘要开发技术路线相关技术介绍核心代码参考示例结论源码lw获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;Python旅行社信息导游管理系统的摘要 旅行社信息导游管理系统基于Python开发&#xff0c;旨在通过数…

作者头像 李华
网站建设 2026/4/17 19:26:41

协同过滤算法 微信小程序的电影推荐系统

目录协同过滤算法在微信小程序电影推荐系统中的应用开发技术路线相关技术介绍核心代码参考示例结论源码lw获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;协同过滤算法在微信小程序电影推荐系统中的应用 协同过滤算法作为推荐系统的核心技术之一…

作者头像 李华
网站建设 2026/4/23 11:46:13

15.1 机器人控制的伦理、安全与社会影响:技术成熟度伴随的责任审视

15.1 机器人控制的伦理、安全与社会影响:技术成熟度伴随的责任审视 15.1.1 引言:从技术可行性到社会可接受性 机器人技术,特别是具备自主决策与行动能力的先进机器人系统,正从受控的工业环境快速渗透至开放的公共空间与人类社会生活场景。这一演进将机器人控制的核心议题…

作者头像 李华
网站建设 2026/4/22 16:45:17

救命神器8个AI论文平台,专科生轻松搞定毕业论文格式规范!

救命神器8个AI论文平台&#xff0c;专科生轻松搞定毕业论文格式规范&#xff01; 专科生的论文救星&#xff1a;AI 工具如何让写作不再难 在当前的学术环境中&#xff0c;越来越多的专科生开始借助 AI 工具来提升论文写作效率。尤其是那些对格式规范不熟悉、时间紧迫的学生来说…

作者头像 李华