news 2026/2/17 4:12:49

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/2/9 1:24:25

基于大数据爬虫+Hadoop的新闻媒体内容推荐与热点话题分析系统开发任务书

一、任务名称 基于大数据爬虫Hadoop的新闻媒体内容推荐与热点话题分析系统开发 二、任务目的 当前新闻媒体行业进入数字化转型深水区&#xff0c;信息过载与内容同质化问题突出&#xff0c;用户难以快速获取精准感兴趣的内容&#xff0c;媒体平台也缺乏对热点话题的实时捕捉、深…

作者头像 李华
网站建设 2026/2/9 9:05:47

xilinx FPGA利用can IP实现can总线通信verilog源码,直接可用,注释清晰...

xilinx FPGA利用can IP实现can总线通信verilog源码&#xff0c;直接可用&#xff0c;注释清晰。 vivado实现&#xff0c;代码7系列以上都兼容最近在项目里折腾CAN总线通信&#xff0c;发现Xilinx官方给的文档虽然全但真找起能直接跑的代码还真费劲。今天就带大家手搓一个基于7系…

作者头像 李华
网站建设 2026/2/9 9:52:49

cdrx4安装出现时msxml6r.dll

在使用电脑系统时经常会出现丢失找不到某些文件的情况&#xff0c;由于很多常用软件都是采用 Microsoft Visual Studio 编写的&#xff0c;所以这类软件的运行需要依赖微软Visual C运行库&#xff0c;比如像 QQ、迅雷、Adobe 软件等等&#xff0c;如果没有安装VC运行库或者安装…

作者头像 李华
网站建设 2026/2/6 23:20:34

存储--SMP(软件制作平台)语言基础知识之四十

计算机的存储&#xff0c;是指存放程序和数据的设备或介质。一般分主存储器和辅助存储器两类&#xff1a;1、主存储器一般叫内存. RAM&#xff08;随机存取存储器&#xff09; 速度快&#xff0c;但断电后数据丢失&#xff0c;临时存放CPU正在处理的数据和程序&#xff0c;是电…

作者头像 李华
网站建设 2026/2/11 15:20:00

【SSM毕设源码分享】基于SSM+vue的优选农产品销售管理系统的设计与实现(程序+文档+代码讲解+一条龙定制)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华