Vue 生命周期详解:从创建到销毁的全过程

news2025/3/17 7:00:15

Vue.js 是一个流行的前端框架,它通过组件化的方式帮助开发者构建用户界面。在 Vue 中,每个组件实例都有其生命周期,从创建、挂载、更新到销毁,Vue 提供了一系列的生命周期钩子函数,允许我们在组件的不同阶段执行自定义逻辑。本文将详细介绍 Vue 的生命周期及其各个阶段。

1. Vue 生命周期的基本概念

Vue 的生命周期指的是一个 Vue 实例从创建到销毁的整个过程。在这个过程中,Vue 提供了一些钩子函数(Lifecycle Hooks),允许开发者在特定的阶段执行代码。这些钩子函数可以帮助我们更好地控制组件的行为,例如在组件创建时初始化数据,在组件销毁时清理资源等。

2. Vue 生命周期的各个阶段

Vue 的生命周期可以分为以下几个阶段:

  • 创建阶段(Creation)

  • 挂载阶段(Mounting)

  • 更新阶段(Updating)

  • 销毁阶段(Destruction)

每个阶段都有对应的生命周期钩子函数,下面我们将逐一介绍这些阶段及其钩子函数。

2.1 创建阶段(Creation)

创建阶段是 Vue 实例的初始化阶段,主要包括以下钩子函数:

2.1.1 beforeCreate
  • 调用时机:在实例初始化之后,数据观测(data observation)和事件配置(event/watcher setup)之前被调用。

  • 使用场景:此时组件的 data 和 methods 还未初始化,通常用于一些与数据无关的初始化操作。

export default {
  beforeCreate() {
    console.log('beforeCreate: 组件实例刚刚创建,数据观测和事件配置还未初始化');
  }
}
2.1.2 created
  • 调用时机:在实例创建完成后被立即调用。此时,数据观测、属性和方法的运算已经完成,但 DOM 还未生成,$el 属性还不存在。

  • 使用场景:常用于数据的初始化、异步请求等操作。

export default {
  data() {
    return {
      message: 'Hello Vue!'
    };
  },
  created() {
    console.log('created: 组件实例创建完成,数据观测已完成,但 DOM 还未生成');
    console.log('message:', this.message);
  }
}

2.2 挂载阶段(Mounting)

挂载阶段是将 Vue 实例挂载到 DOM 的过程,主要包括以下钩子函数:

2.2.1 beforeMount
  • 调用时机:在挂载开始之前被调用,此时模板已经编译完成,但尚未将生成的 DOM 替换到页面上。

  • 使用场景:在挂载之前对 DOM 进行一些操作。

export default {
  beforeMount() {
    console.log('beforeMount: 模板编译完成,但尚未挂载到 DOM');
  }
}
2.2.2 mounted
  • 调用时机:在实例挂载到 DOM 后被调用。此时,组件的 DOM 已经生成,可以通过 this.$el 访问到 DOM 元素。

  • 使用场景:常用于操作 DOM、初始化第三方库等。

export default {
  mounted() {
    console.log('mounted: 组件已挂载到 DOM');
    console.log('DOM element:', this.$el);
  }
}

2.3 更新阶段(Updating)

更新阶段是在组件的数据发生变化时触发的,主要包括以下钩子函数:

2.3.1 beforeUpdate
  • 调用时机:在数据更新时调用,发生在虚拟 DOM 重新渲染和打补丁之前。

  • 使用场景:可以在更新之前访问现有的 DOM,例如保存滚动位置等。

export default {
  data() {
    return {
      count: 0
    };
  },
  methods: {
    increment() {
      this.count++;
    }
  },
  beforeUpdate() {
    console.log('beforeUpdate: 数据更新前,DOM 还未重新渲染');
  }
}
2.3.2 updated
  • 调用时机:在数据更改导致的虚拟 DOM 重新渲染和打补丁之后调用。

  • 使用场景:常用于在数据更新后操作 DOM 或执行一些依赖于 DOM 的操作。

export default {
  updated() {
    console.log('updated: 数据更新后,DOM 已重新渲染');
  }
}

2.4 销毁阶段(Destruction)

销毁阶段是在组件实例被销毁时触发的,主要包括以下钩子函数:

2.4.1 beforeDestroy
  • 调用时机:在实例销毁之前调用。此时,实例仍然完全可用。

  • 使用场景:常用于清理定时器、取消事件监听等操作。

export default {
  beforeDestroy() {
    console.log('beforeDestroy: 组件实例即将销毁');
  }
}
2.4.2 destroyed
  • 调用时机:在实例销毁之后调用。此时,所有的事件监听器和子实例都已被移除。

  • 使用场景:常用于执行一些最终的清理操作。

export default {
  destroyed() {
    console.log('destroyed: 组件实例已销毁');
  }
}

3. 生命周期图示

为了更好地理解 Vue 的生命周期,可以参考以下生命周期图示:

4. Vue 生命周期注意事项

  • 避免在 beforeCreate 和 created 钩子中进行 DOM 操作,因为此时 DOM 还未渲染完成。

  • 在 mounted 钩子中进行 DOM 操作是安全的,因为此时 DOM 已经渲染完成。

  • 在 beforeUpdate 和 updated 钩子中进行 DOM 操作时,要注意避免无限循环更新。

  • 在 beforeDestroy 钩子中及时清除定时器、事件监听器等资源,避免内存泄漏。

  • 理解每个生命周期钩子函数的执行时机和作用,根据实际需求选择合适的钩子函数执行相应的逻辑。

总结

Vue 的生命周期钩子函数为我们提供了在组件不同阶段执行代码的能力。通过合理使用这些钩子函数,我们可以更好地控制组件的行为,优化性能,并确保资源的正确释放。理解 Vue 的生命周期是掌握 Vue.js 开发的重要一步,希望本文能帮助你更好地理解和使用 Vue 的生命周期。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2316473.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

计算机基础:二进制基础12,十进制数转换为十六进制

专栏导航 本节文章分别属于《Win32 学习笔记》和《MFC 学习笔记》两个专栏,故划分为两个专栏导航。读者可以自行选择前往哪个专栏。 (一)WIn32 专栏导航 上一篇:计算机基础:二进制基础11,十六进制的位基…

SpringCloud系列教程(十四):Sentinel持久化

Sentinel之前已经搭建和应用成功了,但是它有一个很大的缺点就是官方没有提供持久化的方案,从项目源码上看感觉这款工具也没有完成的太好,所以需要我们去对它进行二次开发。要补充的功能大概如下: 1、将Sentinel接入nacos中&#…

Slider,InputField,Scroll View,Scrollbar及Layout组件

Slider组件 Fill Rect:填充滑动条选中区域的背景图部分 Handle Rect:滑动条的球 Direction:滑动条的滑动方向 Min Value:起始位置的数值(浮点数) Max Value:结束位置的数值(浮点数) Whole Numbers:必须为整数(布尔…

ollama注册自定义模型(GGUF格式)

文章目录 ollama注册自定义模型(GGUF格式)下载模型注册模型(GGUF格式) ollama注册自定义模型(GGUF格式) 需要全程开启ollama nohup ollama serve > ollama.log 2>&1 &需要注意,尽管手动下载的GGUF格式模…

HarmonyOS NEXT 声明式UI语法学习笔记-创建自定义组件

基础语法概述 ArkTS的基本组成 装饰器:用于装饰类、结构、方法以及变量,并赋予其特殊含义。如上图都是装饰器,Component表示自定义组件,Entry表示表示自定义组件的入口组件,State表示组件中的状态变量,当状…

97.HarmonyOS NEXT跑马灯组件教程:基础概念与架构设计

温馨提示:本篇博客的详细代码已发布到 git : https://gitcode.com/nutpi/HarmonyosNext 可以下载运行哦! HarmonyOS NEXT跑马灯组件教程:基础概念与架构设计 1. 跑马灯组件概述 跑马灯(Marquee)是一种常见的UI组件&a…

81.HarmonyOS NEXT 状态管理与响应式编程:@Observed深度解析

温馨提示:本篇博客的详细代码已发布到 git : https://gitcode.com/nutpi/HarmonyosNext 可以下载运行哦! HarmonyOS NEXT 状态管理与响应式编程:Observed深度解析 文章目录 HarmonyOS NEXT 状态管理与响应式编程:Observed深度解析…

股指期货有卖不出去的时候吗?

在股指期货的交易世界里,很多人都有这样的疑问:股指期货会不会有卖不出去的时候呢?答案是会的,下面咱们就来详细唠唠为啥会出现这种情况。 市场极端行情下难以卖出 1.跌停限制:股指期货和股票一样,也有涨…

开发、科研、日常办公工具汇总(自用,持续更新)

主要记录汇总一下自己平常会用到的网站工具,方便查阅。 update:2025/2/11(开发网站补一下) update:2025/2/21(补充一些AI工具,刚好在做AI视频相关工作) update:2025/3/7&…

HTML5 drag API实现列表拖拽排序

拖拽API(Drag and Drop API)是HTML5提供的一组功能,使得在网页上实现拖放操作变得更加简单和强大。这个API允许开发者为网页元素添加拖拽功能,用户可以通过鼠标将元素拖动并放置到指定的目标区域。 事件类型 dragstart&#xff1…

改变一生的思维模型【11】升维

升维思维模型:突破认知局限的破局法则 一、定义与核心逻辑 升维思维是通过增加分析维度,将问题投射到更高认知层次寻找解决方案的思考方式。其本质是跳出原有竞争维度,在更广阔的空间重构游戏规则。核心逻辑在于:当低维战场陷入…

【动手学深度学习】#2线性神经网络

主要参考学习资料: 《动手学深度学习》阿斯顿张 等 著 【动手学深度学习 PyTorch版】哔哩哔哩跟李牧学AI 目录 2.1 线性回归2.1.1 线性回归的基本元素线性模型损失函数解析解随机梯度下降 2.1.3 最大似然估计 2.2 线性回归从零开始实现2.2.1 生成数据集2.2.2 读取数…

计算机网络——NAT

一、什么是NAT? NAT(Network Address Translation,网络地址转换) 是一种将 私有IP地址 与 公有IP地址 相互映射的技术,主要用于解决IPv4地址不足的问题。它像一名“翻译官”,在数据包经过路由器或防火墙时…

同一子网通信

添加交换机后的通信流程 1. 同一子网内(使用交换机) 判断是否在同一子网: 主机A通过子网掩码判断主机B的IP地址是否属于同一子网。若在同一子网,主机A需要通过ARP获取主机B的MAC地址。 ARP请求(广播)&…

IntelliJ IDEA 快捷键系列:重命名快捷键详解

目录 引言一、默认重命名快捷键1. Windows 系统‌2. Mac 系统‌ 二、操作步骤与技巧1. 精准选择重命名范围‌2. 智能过滤无关内容‌ 三、总结 引言 在代码重构中,‌重命名变量、类、方法‌ 是最常用的操作之一。正确使用快捷键可以极大提升开发效率。本文针对 ‌Ma…

零基础掌握分布式ID生成:从理论到实战的完整指南 [特殊字符]

一、为什么需要分布式ID? 🤔 在单机系统中,使用数据库自增ID就能满足需求。但在分布式系统中,多个服务节点同时生成ID时会出现以下问题: ID冲突:不同节点生成相同ID 扩展困难:数据库自增ID无法…

使用python反射,实现pytest读取yaml并发送请求

pytest yaml yaml - feature: 用户模块story: 登录title: 添加用户request:method: POSTurl: /system/user/listheaders: nullparams: nullvalidate: nullread_yaml_all def read_yaml_all(path):with open(path, r, encodingutf-8) as f:value yaml.safe_load(f)return v…

Matlab 汽车悬架系统动力学建模与仿真

1、内容简介 略 Matlab 170-汽车悬架系统动力学建模与仿真 可以交流、咨询、答疑 2、内容说明 略 本文对题目给定的1/2汽车四自由度模型,建立状态空间模型进行系统分析,并通过MATLAB仿真对系统进行稳定性、可控可观测性分析,对得的结果进行…

专访数势科技谭李:智能分析 Agent 打通数据平权的最后一公里

作者|斗斗 编辑|皮爷 出品|产业家 伦敦塔桥下的泰晤士河底,埋藏着工业革命的隐秘图腾——布鲁内尔设计的隧道盾构机。在19世纪城市地下轨道建设的过程中,这个直径11米的钢铁巨兽没有选择拓宽河道,而是开创了地下通行的新维度。 “我们不…

2、操作系统之软件基础

一、硬件支持系统 ,系统管理硬件 操作系统核心功能可以分为: 守护者:对硬件和软件资源的管理协调者:通过机制,将各种各样的硬件资源适配给软件使用。 所以为了更好的管理硬件,操作系统引进了软件。其中3大…