Vue 3 中的常用生命周期函数使用场景详解

目录

引言

1. beforeCreate()

2. created()

3. beforeMount()

4. mounted()

5. beforeUpdate()

6. updated()

7. beforeUnmount()

总结

引言

在 Vue 3 中,虽然 setup() 函数是 Composition API 的入口点,但传统的 Options API 中的生命周期钩子仍然可用,并且它们的使用方式和 Vue 2 中非常相似。下面我们将详细解释 Vue 3 中一些常用的生命周期函数的使用场景,并通过代码示例来说明其背后的原因。

1. beforeCreate()

        使用场景:在实例初始化之后,数据观测 (data observer) 和 event/watcher 事件配置之前被调用。此时组件的选项对象还未被创建,el 和 data 都为 undefined,无法访问到数据和 DOM。

代码示例(通常不推荐在此阶段进行任何操作,因为很多功能都不可用):

<script>  
export default {  beforeCreate() {  // 很少在此阶段进行操作,因为组件实例尚未完全创建  console.log('beforeCreate 钩子被调用');  },  // ...  
}  
</script>

原因:由于此时组件实例还未完全创建,通常没有太多实际用途,但在某些高级用法中(如插件开发)可能会用到。

2. created()

        使用场景:在实例创建完成后被立即调用。在这一步,实例已完成以下的配置:数据观测 (data observer),属性和方法的运算,以及 watch/event 事件回调。然而,挂载阶段还没开始,$el 属性目前不可见。

代码示例

<script>  
export default {  data() {  return {  message: 'Hello Vue 3!'  };  },  created() {  // 组件实例已创建,可以访问到 data 中的数据  console.log('created 钩子被调用', this.message);  // 可以在这里发起异步请求或执行初始化操作  },  // ...  
}  
</script>

原因created 钩子非常适合执行非 DOM 相关的初始化操作,如数据初始化、网络请求等。

3. beforeMount()

        使用场景:在挂载开始之前被调用:相关的 render 函数首次被调用。此时模板编译完成,但尚未挂载到页面上,$el 属性目前不可见。

代码示例

<script>  
export default {  beforeMount() {  // 模板编译完成,但尚未挂载到页面上  console.log('beforeMount 钩子被调用');  // 可以在这里对即将被挂载的模板做一些处理  },  // ...  
}  
</script>

原因beforeMount 钩子在模板编译完成后执行,但此时 DOM 还未挂载,因此可以在此阶段对模板进行一些处理,如修改虚拟 DOM。

4. mounted()

        使用场景:实例被挂载后调用,此时 el 被新创建的 vm.$el 替换,并挂载到实例上去之后调用该钩子。如果 root 实例挂载了一个 in-document 元素,当 mounted 被调用时 vm.$el 也在文档内。

代码示例

<script>  
export default {  mounted() {  // 组件已挂载到页面上,可以访问到 DOM  console.log('mounted 钩子被调用');  // 可以在这里执行 DOM 操作或启动第三方库  },  // ...  
}  
</script>

原因mounted 钩子在 DOM 挂载完成后执行,因此可以安全地访问和修改 DOM。

5. beforeUpdate()

        使用场景:数据更新时调用,发生在虚拟 DOM 打补丁之前。这里适合在更新之前访问现有的 DOM,比如手动移除已添加的事件监听器。

代码示例

<script>  
export default {  beforeUpdate() {  // 数据更新,但 DOM 还未重新渲染  console.log('beforeUpdate 钩子被调用');  // 可以在这里访问更新前的 DOM 状态  },  // ...  
}  
</script>

原因:在 beforeUpdate 钩子中,你可以访问到更新前的 DOM 状态,这在某些需要处理更新过程中副作用的情况下非常有用。

6. updated()

        使用场景:由于数据更改导致的虚拟 DOM 重新渲染和打补丁,在这之后会调用该钩子。当这个钩子被调用时,组件 DOM 已经更新,所以你现在可以执行依赖于 DOM 的操作。然而在大多数情况下,你应该避免在此期间更改状态,因为这可能会导致更新无限循环。

代码示例

<template>  <div>{{ message }}</div>  
</template>  <script>  
export default {  data() {  return {  message: 'Hello Vue 3!'  };  },  updated() {  // DOM 已更新,可以执行依赖于 DOM 的操作  console.log('updated 钩子被调用', this.message);  // 可以在这里访问更新后的 DOM 状态,并执行相关的 DOM 操作  },  methods: {  changeMessage() {  this.message = 'Hello, updated!';  }  },  // ...  
}  
</script>

原因updated 钩子在数据更新并重新渲染 DOM 后调用,因此可以访问到更新后的 DOM 状态。这在进行一些依赖于 DOM 状态的操作(如重新计算布局、更新动画等)时非常有用。但请注意,避免在此钩子中修改数据,因为这可能导致无限更新循环。

7. beforeUnmount()

使用场景:组件实例卸载之前调用。在这个阶段,实例仍然完全可用。

代码示例

<script>  
export default {  beforeUnmount() {  // 组件即将被卸载  console.log('beforeUnmount 钩子被调用');  // 可以在这里清理定时器、移除事件监听器等  },  // ...  
}  
</script>

 原因:在组件卸载之前,我们需要确保清理掉任何可能导致内存泄漏或意外的副作用的资源。使用 beforeUnmount 可以确保这些资源在组件卸载时得到正确清理。

总结

        Vue 3 的生命周期钩子为开发者提供了在组件生命周期的不同阶段执行特定逻辑的能力。通过合理使用这些钩子,我们可以更好地管理组件的状态、DOM 操作和副作用,从而创建出更高效、更健壮的 Vue 应用程序。每个钩子都有其特定的使用场景,了解并正确使用它们可以大大提高我们的开发效率。

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

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

相关文章

JavaScript的操作符运算符

前言&#xff1a; JavaScript的运算符与C/C一致 算数运算符&#xff1a; 算数运算符说明加-减*乘%除/取余 递增递减运算符&#xff1a; 运算符说明递增1-- 递减1 补充&#xff1a; 令a1&#xff0c;b1 运算a b ab12ab22ab--10a--b00 比较(关系)运算符&#xff1a; 运算…

(优作)基于STM32 人群定位、调速智能风扇设计(程序、设计报告、视频演示)

引言 当今生活中&#xff0c;风扇已成为人们解暑的重要工具&#xff0c;然而使用风扇缓解夏日酷热的同时也存在着一些问题。比如&#xff0c;由于风扇的转动方向只能机械式的保持在一定范围内&#xff0c;而不能根据人群的位置做出具体的调整&#xff0c;即在一片区域内&#x…

MongoDB详解

目录 一、MongoDB概述 1.MongoDB定义 2.MongoDB主要特点 2.1文档 2.2集合 2.3数据库 2.4数据模型 二、安装MongoDB 1.Windows安装MongoDB 1.1下载MongoDB 1.2安装MongoDB 1.3配置MongoDB 1.3.1可能遇到的问题 1.4安装一盒可视化工具 2.Linux安装MongoDB 2.1下载…

苍穹外卖项目

Day01 收获 补习git Git学习之路-CSDN博客 nginx 作用&#xff1a;反向代理和负载均衡 swagger Swagger 与 Yapi Swagger&#xff1a; 可以自动的帮助开发人员生成接口文档&#xff0c;并对接口进行测试。 项目接口文档网址&#xff1a; ​​​​​​​http://localhost:808…

Claude聊天机器人推出全新iOS客户端及团队专属计划

Anthropic 正在使其 Claude AI 更易于在移动设备上访问。该公司发布了适用于 iOS 的 Claude 移动应用程序,任何用户都可以免费下载。与聊天机器人的移动网络版本类似,该应用程序跨设备同步用户与 Claude 的对话,允许他们从计算机跳转到应用程序(反之亦然),而不会丢失聊天…

带权并查集

续前章节&#xff1a;并查集及应用 目录 1 带权问题1.1 点带权1.2 边带权 2 例题2.1 家族合并2.2 信息传递2.3 [NOI2002] 银河英雄传说 1 带权问题 1.1 点带权 用num[i]记录节点 i i i 所在的集合的数量。 初始化&#xff1a;所有的num[i]都是 1 1 1&#xff0c;因为每个点…

【stm32-2】按键控制LED光敏传感器控制蜂鸣器

1.按键控制LED uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); //读取输入数据寄存器某一个端口的输入值 uint16_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx); //读取整个输入数据寄存器 uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDe…

Linux基础指令001

名称日期版本说明作者了解并熟练运用Linux基础指令2024/05/04v0.0.1汇总篇lgb 一&#xff0c;了解Linux,并安装 Linux是一套免费使用和自由传播的类Unix操作系统&#xff0c;是一个多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的UNIX工具软件、应用程序和网络协…

【机器学习-21】集成学习---Bagging之随机森林(RF)

【机器学习】集成学习---Bagging之随机森林&#xff08;RF&#xff09; 一、引言1. 简要介绍集成学习的概念及其在机器学习领域的重要性。2. 引出随机森林作为Bagging算法的一个典型应用。 二、随机森林原理1. Bagging算法的基本思想2. 随机森林的构造3. 随机森林的工作机制 三…

导弹追踪效果实现_unity基础开发教程

Unity开发中导弹追踪的原理与实现 前言原理逻辑实现导弹逻辑目标赋值 应用效果结语 前言 ⭕在之前的一个项目的开发中&#xff0c;需要加入一个导弹追踪的游戏功能&#xff0c;且还要实现不规则发射路径&#xff0c;但是这种功能是第一次做&#xff0c;经过查阅资料和询问做过的…

Pytorch快速上手

Pytorch快速上手 一、加载数据集 &#xff08;Dataset&#xff09; 加载数据集需要继承Dataset&#xff0c;通常情况下需要实现__init__方法、__getitem__方法以及__len__方法。 案例一&#xff1a; import osimport torch from torch.utils.data import Dataset from PIL …

[嵌入式AI从0开始到入土]17_Ascend C算子开发

[嵌入式AI从0开始到入土]嵌入式AI系列教程 注&#xff1a;等我摸完鱼再把链接补上 可以关注我的B站号工具人呵呵的个人空间&#xff0c;后期会考虑出视频教程&#xff0c;务必催更&#xff0c;以防我变身鸽王。 第1期 昇腾Altas 200 DK上手 第2期 下载昇腾案例并运行 第3期 官…

C++静态数组和C语言静态数组的区别( array,int a[])

目录 一、区别 1、越界读&#xff0c;检查不出来 2、越界写&#xff0c;抽查&#xff0c;可能检查不出来&#xff0c;有局限性 二、array缺点 一、区别 C语言的静态数组int a[]; 静态数组的越界检查不稳定的&#xff1a; 1、越界读&#xff0c;检查不出来 2、越界写&#x…

通过helm在k8s上安装minio

1 helm安装minio 1.1 下载minio 添加仓库 helm repo add bitnami https://charts.bitnami.com/bitnami 将minio拉取下来 helm pull bitnami/minio --version 版本号 解压到本地开始编辑配置文件 tar -zxf minio-xxx.tgz [rootk8s-master01 minio]# vi values.yaml 1.2…

Python-VBA函数之旅-open函数

目录 一、open函数的常见应用场景 二、open函数使用注意事项 三、如何用好open函数&#xff1f; 1、open函数&#xff1a; 1-1、Python&#xff1a; 1-2、VBA&#xff1a; 2、推荐阅读&#xff1a; 个人主页&#xff1a;神奇夜光杯-CSDN博客 一、open函数的常见应用场…

Kannala-Brandt 鱼眼相机模型

最近在学习 ORB-SLAM3 的源代码&#xff0c;并模仿、重构了相机模型的实现 在学习的过程中发现针孔相机 (Pinhole) 与鱼眼相机 (Fisheye) 都有畸变参数&#xff0c;但是鱼眼相机无法使用 cv::undistort 函数去畸变 在对鱼眼相机的深度归一化平面进行可视化后&#xff0c;发现…

SQL 注入神器:SQLMap 简单使用

前言 SQLMap 是一款用于自动化 SQL 注入检测与渗透测试的开源工具&#xff0c;其主要功能是检测和利用 Web 应用程序中的 SQL 注入漏洞。以下是 SQLMap 的主要特点和功能&#xff1a; 自动化检测&#xff1a;SQLMap 可以自动发现 Web 应用程序中的 SQL 注入漏洞&#xff0c;包…

QT5之windowswidget_菜单栏+工具栏_核心控件_浮动窗口_模态对话框_标准对话框/文本对话框

菜单栏工具栏 新建工程基类是QMainWindow 1、 2、 3、 点.pro文件&#xff0c;添加配置 因为之后用到lambda&#xff1b; 在.pro文件添加配置c11 CONFIG c11 #不能加分号 添加头文件 #include <QMenuBar>//菜单栏的头文件 主窗口代码mainwindow.cpp文件 #include &q…

Hive大数据任务调度和业务介绍

目录 一、Zookeeper 1.zookeeper介绍 2.数据模型 3.操作使用 4.运行机制 5.一致性 二、Dolphinscheduler 1.Dolphinscheduler介绍 架构 2.架构说明 该服务内主要包含: 该服务包含&#xff1a; 3.FinalShell主虚拟机启动服务 4.Web网页登录 5.使用 5-1 安全中心…

局域网唤醒平台:UpSnap

简介&#xff1a;UpSnap是一个简单的唤醒局域网网络应用程序。UpSnap为每个用户、每个设备提供了唯一的访问权限。虽然管理员拥有所有权限&#xff0c;但他们可以为用户分配特定的权限&#xff0c;如显示/隐藏设备、访问设备编辑、删除和打开/关闭设备电源。 历史攻略&#xf…