vue3专栏项目 -- 四、前后端结合(下)

一、async 和 await

1、使用async 和 await 改造异步请求

在接触后端API以后就遇到了越来越多的异步请求,现在我们就使用async 和 await 改造异步请求。

async function是把返回内容包裹成个Promise返回Promise

await 它在async function里面才起作用,它可以放在任何异步的基于Promise的代码之前,它会暂停代码在这行上,直到Promise完成,然后返回结果值

如下,修改我们的异步请求

改为如下:

在function前加async,然后在axios前用await,此时返回的是请求回来的结果,因为我们要的是请求数据里的data,所以我们直接展开即const {data}接里面的data

有点重复,所以我们抽离出来做个函数

2、使用axios 拦截器添加loading效果

发送异步请求的时候,最好在界面给用户一个提示,告诉用户现在数据在读取中请耐心等待这样子,这就是经典的loading问题,这个loading字段显然就是一个全局状态,在各个页面都可能使用,那么提到全局状态,那么自热而然想到了这个store,那么现在我们就给store添加一个loading字段

然后我们在页面加个简单的loading效果

现在这种方法虽然看起来没有什么问题,但是我们要在每次发请求的地方多次加上这种commit信息来触发mutation的变化来修改store中数据的变化,这里仅仅是获取数据即get commit,但是我们后面还会有post的请求,甚至还有update、delete请求,那么每次请求中都要反复去comiit setLoading就比较麻烦,有没有什么地方可以优化。

axios就来帮助我们了,axios有一个关键特性叫Interceptors即拦截器,通过拦截器我们可以在全局层面拦截到在请求发送时和响应返回时的状态,然后我们可以在对应的钩子函数中进行一些逻辑的操作。

如下例子中,可以使用axios.interceptors.request就是发送请求的时候,然后use(),里面有config然后返回config,我们就是在use()中添加逻辑,我们的逻辑就是请求的时候把这个loading设置为true,返回的时候设置为false即可

如下,我们到main.ts中,这里面我们有一个axios.default配置,所以axios的配置呢我们都可以写到这里

现在我们这个loading已经可以在页面运作了,而且每次请求和开始的时候它都会被interceptors即拦截器完美的拦截,每次请求都会自动触发对应的mutation,非常的好用

二、Loader组件编码

1、基本部分

对应这个loading的图标,bootstrap已经为我们提供了现成的解决方案

我们需要一个占满屏幕的遮罩层,然后里面旋转图标,然后一行文字这样子

如下Loader.vue,App.vue

2、使用Teleport 进行改造

前面留下一个问题,就是loader组件是一个全局组件,但是它现在被包裹在app的container下面,

那么样式就可能会受到外层父组件的影响

vue3给我们提供了解决方案,这个解决方案就是Teleport即传送门,把我们要用的内容用<teleport>这个标签进行包裹,其中属性为to指向某个css的selected,如下,我们给指向id为back这么一个元素

但是这时候会报错,因为我们还需要在html中添加入id为back的div,所以如下

加入,如下

但是如果用户想使用这个组件,那么他还必须在html中加上一个这个div,就不方便,不是一个良好的组件设计,所以我们想使用另外的方法来实现对应的功能,我们需要在body中创建一个最顶层的div,我们可以在组件还没渲染即在dom之前手动创建一个div,然后把它id设置成back不就可以了吗,我们应该在setup中创建,因为这时候组件还没有挂载到dom节点上

如下

我们修改一下,让它loader2秒后再消失,如下

然后我们发现,即使loader已经消失了,但是它那个id为back的div还在,而且如果我们进入专栏详情页可以看到是又创建了一个div节点

随着页面来回跳转,这样的节点就越来越多,所以我们要解决这个问题,也就是说在组件卸载以后我们需要手动来清除这个节点,所以我们在onUnmounted中把这个节点删除即可

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

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

相关文章

大厂常见算法50题-两数相加

专栏持续更新50道算法题&#xff0c;都是大厂高频算法题&#xff0c;建议关注, 一起巧‘背’算法! 文章目录 题目解法总结 题目 解法 定义一个节点pre&#xff0c;用于初始化结果链表的头部&#xff0c;cur指向pre&#xff0c;它将在遍历过程中用于构建新的链表。初始化进位变…

Linux实验 Shell编程

实验目的&#xff1a; 熟练掌握Shell程序的建立与执行&#xff1b;掌握Shell变量的两种类型&#xff08;Shell环境变量和用户自定义变量&#xff09;及其用法&#xff1b;掌握Shell中的特殊字符、算术与逻辑运算&#xff1b;掌握Shell中输入输出命令&#xff1b;掌握Shell程序…

学术共振 美妙发声 | 2024美沃斯大会完美收官,米兰柏羽倾力承办

5月10日-5月12日&#xff0c;为期3天的第十七届美沃斯医疗美容大会在杭州国际博览中心盛大举办&#xff0c;作为行业顶级学术交流平台&#xff0c;本届美沃斯大会不仅是医美行业的一次学术交流盛会&#xff0c;更是一次深度探讨行业未来的远眺之窗。 5月9日&#xff0c;即美沃…

Docker 安装 MySQL(Mac电脑M芯片)

Docker 安装 MySQL&#xff08;Mac电脑M芯片&#xff09; 1. 下载MySQL镜像文件2. 创建容器实例2.1 命令参数介绍 3. 容器实例内连接MySQL3.1 进入容器实例后台3.2 连接MySQL 4. DBeaver连接MySQL4.1 连接异常 1. 下载MySQL镜像文件 # 默认下载laster版本 docker pull mysql# …

MPEG-4 AVC/H.264高清编码器 JR3211P

概述 JR3211P MPEG-4 AVC/H.264高清编码器是一款专业的高清音/视频编码产品。该产品支持几乎所有模拟及数字音/视频输入接口&#xff0c;包括CVBS、YPbPr、S-video、SD/HD-SDI、HDMI视频输入接口、平衡模拟音频&#xff08;XLR&#xff09;、非平衡模拟音频&#xff08;RCA&am…

百度云内容审核

百度云内容审核介绍 百度智能云内容审核平台&#xff1a;是一款针对多媒体内容进行智能审核的服务平台。支持对图像、文本、音频、视频、直播等内容进行安全审核&#xff0c;具有精准的审核模型、丰富的审核维度、灵活的规则配置等特点。通过可视化界面选择审核维度、个性化调整…

LabVIEW开发RS422通信

LabVIEW开发RS422通信 项目围绕LabVIEW软件开发的程序在RS422通信技术检测方面的应用进行展开&#xff0c;通过软件编程将上位计算机虚拟化为检测设备&#xff0c;控制其通信端口与被测产品进行RS422通信&#xff0c;以此检验产品的性能优劣。该虚拟检测仪器在实际测试中表现出…

Adobe Media Encoder ME v24.3.0 解锁版 (视频和音频编码渲染工具)

Adobe系列软件安装目录 一、Adobe Photoshop PS 25.6.0 解锁版 (最流行的图像设计软件) 二、Adobe Media Encoder ME v24.3.0 解锁版 (视频和音频编码渲染工具) 三、Adobe Premiere Pro v24.3.0 解锁版 (领先的视频编辑软件) 四、Adobe After Effects AE v24.3.0 解锁版 (视…

Go框架三件套:Gorm的基本操作

1.概述 这里的Go框架三件套是指 Web、RPC、ORM框架&#xff0c;具体如下: Gorm框架 gorm框架是一个已经迭代了10年的功能强大的ORM框架&#xff0c;在字节内部被广泛使用并且拥有非常丰富的开源扩展。 Kitex框架 Kitex是字节内部的Golang微服务RPC框架&#xff0c;具有高性能…

Shell编程之循环语句

目录 一、for循环 for循环实操 二、while循环 while循环实操 三、until循环命令 until循环实操 一、for循环 读取不同的变量值&#xff0c;用来逐个执行同一组命 for 变量 in 取值列表 do 命令序列 done [rootlocalhost ~]# for i in 1 2 3 4 5 > do > echo "…

Android PreferenceActivity可以自动设置的Activity

1、介绍 PreferenceActivity 是一个抽象类&#xff0c;继承自ListActivity ,该类封装了SharedPreferences. PreferenceActivity 提供了一些常用的设置项如,与普通组件一样&#xff0c;这些配置项既可以从XML文件创建&#xff0c;也可以从代码创建. 每一个设置项标签有一个andro…

FRP多级内网穿透实验(虚拟机多级网络环境搭建+FRP工具使用)

0x00 实验背景 最近在工作中遇到了一个指定必须使用FRP作为内网穿透工具的活动&#xff0c;由于以前没有深入分析过多层内网的实验环境&#xff0c;对多级级联转发还不是很熟悉&#xff0c;在这里简单记录一下环境搭建与实验内容。 0x01 环境搭建 环境搭建以VM为为虚拟平台&…