Vue 3 里的 onMounted 怎么用?

在这里插入图片描述

疑问

最近,一直在学习 Vue 3,此前我不懂前端,也没写过 Vue 2,所以是从 0 开始学习 Vue 3 的。很多对普通人不是疑问的,在我这里也会不太清楚。

我在写项目的时候,常见的一种场景是这样的:页面加载的时候,需要从后端或者服务提取数据,然后渲染到页面上。不知道这样的情况大家怎么写?

const list = ref([])
async function getData() {
  const param1 = "something"
  const param2 = "something"
  const result = await getDataFromServer(param1, param2)
  list.value = result.data
}
getData()

我一般默认会这样写,就是先写个函数,里面是调用远程数据的。然后直接调用这个函数。

后来,我知道了有生命周期钩子这种东西,比如 onMounted,那么上面的情况,就还可以有一种写法:

//... ...
onMounted(() => {
  getData()
})

那么到底应该在 代码里直接调用,还是应该用 onMounted 钩子函数呢?

解答

在Vue 3中,立即调用一个函数和在onMounted 钩子中调用该函数之间的主要区别在于它们执行的时机以及它们可以访问的Vue组件上下文的差异。

  1. 立即调用函数:当你在组件的setup函数中声明并立即调用一个函数时,这个函数会在组件的初始化阶段立即执行。这意味着它会在组件的其它生命周期钩子之前执行,甚至在模板和DOM被渲染之前。这对于初始化状态或执行不依赖于DOM的逻辑是有用的。然而,由于此时组件尚未挂载,所以无法访问到DOM元素,同时也无法保证所有的子组件或异步数据已经加载完成。
  2. 使用onMountedonMounted是Vue的一个生命周期钩子,它会在组件的DOM已经被挂载到页面上之后调用。这意味着当你在onMounted钩子中调用函数时,你可以安全地执行DOM操作或者执行依赖于子组件已经挂载的操作。此时,组件已经完成了初始渲染,因此对于需要访问或修改DOM的操作,onMounted是一个理想的位置。

总结一下,主要区别在于:

  • 执行时机:立即调用函数在组件初始化时立即执行,而onMounted在组件挂载完成后执行。
  • 能做什么:立即调用函数适用于不需要DOM,且不依赖于组件挂载的逻辑。而onMounted适用于需要访问或修改DOM,或依赖于子组件已挂载的场景。
  • 访问组件上下文:在Vue 3的setup函数中,无论是立即调用函数还是onMounted中调用的函数,都可以访问组件上下文(通过setup的参数或useContext),但是在onMounted中可以确保所有的响应式数据已经准备好,且组件已经挂载。

选择哪种方式取决于你的具体需求和你需要执行的操作类型。

总结

以上是 GPT 给我的回答,我是存疑的,不过总算还是有一些提示的。首先,onMounted 更多关乎视觉的渲染问题,可能涉及到 DOM 的就位问题。所以,初步的结论是,如果不涉及到界面 DOM 元素的等待,那么可以直接调用,否则应该用 onMounted

不过我在调试的时候发现 onMounted 的另一个问题,就是在 Vite 调试环境下,如果用了 onMounted,一旦触发了 HMR,那么有些情况下,里面的回调不会执行。因为 HMR 只是热加载它认为变化的模块,如果没有涉及当前的模块,那么很可能不会再次触发 onMounted 的回调,但是页面又真的被刷新了,导致出现了数据空白,必须在 onUpdated 回调中调用,才能解决。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

分类预测 | Matlab实现MTF-CNN-Mutilhead-Attention马尔可夫转移场卷积网络多头注意力机制多特征分类预测/故障识别

分类预测 | Matlab实现MTF-CNN-Mutilhead-Attention马尔可夫转移场卷积网络多头注意力机制多特征分类预测/故障识别 目录 分类预测 | Matlab实现MTF-CNN-Mutilhead-Attention马尔可夫转移场卷积网络多头注意力机制多特征分类预测/故障识别分类效果基本介绍模型描述程序设计参考…

基于SSM非遗视域下喀什旅游网站

ssm非遗视域下喀什旅游网站的设计与实现 摘要 我们的生活水平正在不断的提高,然而提高的一个重要的侧面表现就是更加注重我们的娱乐生活。旅行是我们都喜欢的一种娱乐方式,各式各样的旅行经历给我们带来的喜悦也是大不相同的。带来快乐的同时也因为其复…

IntelliJ IDE 插件开发 | (七)PSI 入门及实战(实现 MyBatis 插件的跳转功能)

系列文章 IntelliJ IDE 插件开发 |(一)快速入门IntelliJ IDE 插件开发 |(二)UI 界面与数据持久化IntelliJ IDE 插件开发 |(三)消息通知与事件监听IntelliJ IDE 插件开发 |(四)来查收…

MongoDB高可用架构涉及常用功能整理

MongoDB高可用架构涉及常用功能整理 1. mongo架构和相关组件1.1. Master-Slave主从模式1.2. Replica Set 副本集模式1.3. Sharding 分片模式 2. Sharding 分片模式2.1. Hashed Sharding方式2.2. Range Sharding方式 3. 事务性4. 疑问和思考4.1. 怎么保证数据的高可靠&#xff1…

常用中间件redis,kafka及其测试方法

常用消息中间件及其测试方法 一、中间件的使用场景引入中间件的目的一般有两个:1、提升性能常用的中间件:1) 高速缓存:redis2) 全文检索:ES3) 存日志:ELK架构4) 流量削峰:kafka 2、提升可用性产品架构中高可…

Web前端—浏览器渲染原理

浏览器渲染原理 浏览器渲染原理渲染时间点渲染流水线1. 解析HTML—Parse HTML2. 样式计算—Recalculate Style3. 布局—Layout4. 分层—Layer5. 绘制—Paint6. 分块—Tiling7. 光栅化—Raster8. 画—Draw完整过程 面试题1. 浏览器是如何渲染页面的?2. 什么是 reflow…

linux apt 速度慢 换源

Ubuntu 20.04.1 LTS已推出,一样的为期5年的服务,感觉不错,安装了一个,但是苦于使用默认源在国内下载太慢,就想着把apt源改为国内源,目前国内比较好的源,有阿里源,清华源,豆瓣源等,下面我以阿里源为例,说下如何修改。 也可以在中科大https://mirrors.ustc.edu.cn/查…

使用amd架构的计算机部署其他架构的虚拟机(如:arm)

1 下载quem模拟器 https://qemu.weilnetz.de/w64/2 QEMU UEFI固件文件下载(引导文件) 推荐使用:https://releases.linaro.org/components/kernel/uefi-linaro/latest/release/qemu64/QEMU_EFI.fd3 QEMU 安装 安装完成之后,需要将安装目录添加到环境变…

福昕阅读器 PDF 文档基本操作

福昕阅读器 PDF 文档基本操作 References 转至 PDF 顶部 快捷键:Home. 转至 PDF 顶部 快捷键:End. 打开超链接 文本选择工具 -> 手形工具 (Hand Tool) -> 点击超链接 福昕阅读器 同时在多个窗口中打开多个文件 文件 -> 偏好设置 -> 文…

数据库导入文件或者运行文件的时候报错误 #1046 - No database selected

如果我们在使用数据库导入文件的时候报错误 #1046 - No database selected该怎么解决 那么小编带我们可以从三个角度去观察 1、这种情况一般是因为你在数据库中没有这个数据库,你新建一个你要导入的数据库名字的数据库,然后选中该数据库,再进…

设计模式-初步认识

目录 🛻1.什么是设计模式 🚚2.设计模式的优点 🚍3.设计模式6大原则 🛴4.设计模式类型 1.什么是设计模式 设计模式代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开…

如何使用PHP和RabbitMQ实现消息队列?

前言 今天我们来做个小试验,用PHP和RabbitMQ实现消息队列功能。 前期准备,需要安装好docker、docker-compose的运行环境。 如何使用docker部署php服务_php如何使用docker发布-CSDN博客 一、安装RabbitMQ 1、创建相关目录,执行如下命令。…

数据分析与挖掘

数据起源: 规模庞大,结构复杂,难以通过现有商业工具和技术在可容忍的时间内获取、管理和处理的数据集。具有5V特性:数量(Volume):数据量大、多样性(Variety)&#xff1a…

neo4j所有关系只显示RELATION,而不显示具体的关系

当看r时,真正的关系在properties中的type里,而type为“RELATION” 造成这个的原因是: 在创建关系时,需要指定关系的类型,这是固定的,不能像属性那样从CSV文件的一个字段动态赋值。标准的Cypher查询语言不支…

Verilog刷题笔记42

题目:Create 16 D flip-flops. It’s sometimes useful to only modify parts of a group of flip-flops. The byte-enable inputs control whether each byte of the 16 registers should be written to on that cycle. byteena[1] controls the upper byte d[15:8…

轻量级 C++ UI 库:快速、可移植、自包含 | 开源日报 No.168

ocornut/imgui Stars: 53.4k License: MIT imgui 是 C 的无臃肿图形用户界面,具有最小的依赖关系。 该项目的主要功能、关键特性、核心优势包括: 为 C 提供了一个轻量级的图形用户界面库输出优化的顶点缓冲区,可在 3D 渲染应用程序中随时呈…

Django下载使用、文件介绍

【一】下载并使用 【1】下载框架 (1)注意事项 计算机名称不要出现中文python解释器版本不同可能会出现启动报错项目中所有的文件名称不要出现中文多个项目文件尽量不要嵌套,做到一项一夹 (2)下载 Django属于第三方模块&#…

网络套接字-TCP服务器

一 前言 前面已经写过udp服务器的实现了&#xff0c;那里说了很多编写服务器的所需知识&#xff0c;在tcp服务器实现中就不再赘述了。 二 服务端编写 大致接口如下。 ./server port端口号 启动时指明端口号 void usage(const std::string proc) {std::cout<<"Usa…

jetcache 2级缓存模式实现批量清除

需求 希望能够实现清理指定对象缓存的方法&#xff0c;例如缓存了User表&#xff0c;当User表巨大时&#xff0c;通过id全量去清理不现实&#xff0c;耗费资源也巨大。因此需要能够支持清理指定本地和远程缓存的批量方法。 分析 查看jetcache生成的cache接口&#xff0c;并没…

银行监管报送系统介绍(五):金融统计数据大集中自动化报送系统——PBOC Report

人民银行金融统计数据大集中自动化报送系统&#xff08;简称PBOC Report&#xff09;&#xff0c;是基于现代计算机网络技术应用基础上&#xff0c;由人行总行设置金融统计数据服务器&#xff0c;建立的一个全国统一的金融统计数据库。 人行针对各银行存贷款、中间业务、网点人…
最新文章