前言

我们之前制作的 Vue3 + AntDesign Vue + SpringBoot 的增删改查小 Demo 的功能已经全部实现了,但是还是有一点不完美,在发送请求到后端返回数据这一段时间内前台未做任何响应。不过以我们现在的数据量和网速来说问题不大,请求时间最长也不过几百毫秒,不会影响日常使用体验。不过在网络环境不太好或者数据量很大的情况下则会给用户带来非常糟糕的体验,其在点击按钮到数据返回到浏览器这一段时间内无法知道自己是否向服务器发起了请求,以及当前页面是否是可操作的。如果用户在点击按钮后发现页面没有响应,则有可能对当前页面进行操作,那么数据有可能在用户操作页面的过程中被浏览器接收从而导致用户操作的丢失,也可能发生其他的未知错误。

大部分用户在点击了刷新按钮而页面没有发生变化时会选择重复点击按钮,而我们要在浏览器承购接收到数据之前对页面做点什么,例如将按钮的状态设置为 disable,或者为 table 设置一个 loading 的状态,因为之前做的小 Demo 没有刷新按钮,则采用后者来提升用户体验。

为了模拟网络较差环境下的用户体验,我们采用浏览器的 网速限制 功能来将网络切换至 3G

  • 打开浏览器 -> f12 进入控制台 -> 选择 「性能」

    • Chrome

    • Edge

    • FireFox

      f12 控制台 -> 网络

Pinia

也借此机会引入一个 Vue3 的状态管理工具: pinia

它类似与 Vuex,用法和功能也都大相径庭

安装与引入:

  • 安装:

    npm install pinia

  • main.ts 中注册:

    import { createPinia } from "pinia";
    
    const pinia = createPinia();
    createApp(App).use(pinia).mount('#app')

新建 src/store/mainStore.ts

import { defineStore } from 'pinia'
import {ref} from "vue"; // 第一个参数是应用程序中 store 的唯一 id
export const useMainStore = defineStore('main', () => {
const tableLoading = ref(true);
// ↑ 定义一个表格加载状态, true 为正在加载 // ↓ 两个方法,改变表格加载状态
function tableLoading2true() {
tableLoading.value = true;
}
function tableLoading2false() {
tableLoading.value = false;
console.log(tableLoading.value);
} return {
tableLoading,
tableLoading2true,
tableLoading2false,
}
})

在页面中注册

  • script

    const mainStore = useMainStore();
  • template

<a-table
...
:loading="mainStore.tableLoading"
>

由于我们之前在 mainStore.ts 中设置了 tableLoading 的值为 true,所以无论在何时 table 的状态都会是 loading

完善接口

我们现在已经可以使用 pinia 来控制全局变量的状态,但是总不能每次改变 tableloading 状态时都手动切换。还记得之前在定义 mainStore.ts 中我们在 defineStore 内添加了两个方法么?可以使用它们来操控数据的状态。

我们要做的是:在点击按钮(查找/翻页)或者点击刷新的瞬间,也就是发起请求的时候 让 tableLoading 的值为 true,后端返回结果后将值变为 false

明确了需求,接下来 完善代码:

由于我们所有的接口请求都放在了 src/api/fruitApi.ts 内,只需要在在内部请求请求的方法里添加相关代码即可。

import {useMainStore} from "@/store/mainStore";

// 引入 store
const mainStore = useMainStore(); export function getFruitRequest(...) {
...
mainStore.tableLoading2true();
axios({
...
})
.finally(() => {
...
mainStore.tableLoading2false();
})
}

测试

动图就不放了,各位看官心领神会

pinia - 为 antdv 表格添加加载状态的更多相关文章

  1. Bootstrap 按钮(Button)插件加载状态

    通过按钮(Button)插件,您可以添加进一些交互.比如控制按钮的状态.或者为其它组件(工具栏)创建按钮组. 加载状态 如需向按钮添加加载状态,只需要简单地向 button 元素添加 data-loa ...

  2. 【清单】值得「等待」的12个指示加载状态的 js 库

    以下优选 GitHub 上高 star 的指示加载状态的 JavaScript 库.另外这里还有10个有意思的 JavaScript 实战小项目供大家学习. 上期入口:一份数据分析学习清单.xls M ...

  3. Bootstrap Table表格一直加载(load)不了数据-解决办法

    bootstrap-table是一个基于Bootstrap风格的强大的表格插件神器,官网:http://bootstrap-table.wenzhixin.net.cn/zh-cn/ 这里列出遇到的一 ...

  4. 加载状态为complete时移除loading效果

    一.JS代码: //获取浏览器页面可见高度和宽度 var _PageHeight = document.documentElement.clientHeight, _PageWidth = docum ...

  5. bootstrap按钮加载状态改变

    bootstrap里面有个激活按钮的时候,按钮变成不可用的: 按照官网里面的方法介绍是在button按钮加个data-loading-text="Loading..."属性,然后j ...

  6. js 判断页面加载状态

    //----判断当前页面是否加载状态 开始 ---- document.onreadystatechange = subSomething;//当页面加载状态改变的时候执行这个方法. function ...

  7. 动态加载JS文件,并根据JS文件的加载状态来执行自己的回调函数

    动态加载JS文件,并根据JS文件的加载状态来执行自己的回调函数, 在很多场景下,我们需要在动态加载JS文件的时候,根据加载的状态来进行后续的操作,需要在JS加载成功后,执行另一方法,这个方法是依托在加 ...

  8. 表格重新加载 where 携带上次值问题

    表格重载两种方式: 方式一: tableIns.reload(options)   注意这种方式的重载是不会携带上次数据加载时的where值     //使用 第一次渲染返回的对象 var table ...

  9. RxJava异步请求加载状态控制

    在我看来,RxJava最大的特点就是异步,无论你是解析复杂的数据或是IO操作,我们都可以利用它内置的线程池进行线程间的调度,简单的使用 subscribeOn(Schedulers.io()).doO ...

  10. Report Server运行后一直处于加载状态

    描述:对Report server做了一个小练习,算是入门,但发现运行起来后,页面一直处于加载状态,不知为何? 解决:查了一下网上的资料,解决的方法是 protected void Page_Load ...

随机推荐

  1. 踩坑记录:windows11下使用 VS2022 和 PCL1.14.1 配置点云开发环境

    闲话不多说,具体在windows下下载PCL与解压pcl可以看https://www.yuque.com/huangzhongqing/pcl/这位大佬的文章,那我就具体说一下踩过点坑: 踩坑点1: ...

  2. css3实现背景三角形样式

    话不多说上效果图: css: font-family: PingFang-SC-Heavy, PingFang-SC; font-weight: 800; color: #2160AD; border ...

  3. CSP-S提高组数据结构算法模板大合集

    CSP-S 算法总结 2.2.1 基础知识与编程环境 无 2.2.2 C++ 程序设计 2 set/nultiset map/multimap deque/priority_queue STL 2.2 ...

  4. LLM并行训练7-混合并行总结

    概述 根据前面的系列文章, 对预训练大模型里用到的主要并行加速技术做了一系列拆分分析. 但是在实际的训练里往往是多种并行混合训练. 我们要怎么配置这些并行策略才能让训练框架尽可能的减少通信瓶颈, 提升 ...

  5. 使用Java对稀疏数组的压缩与还原

    稀疏矩阵的压缩与还原 稀疏数组中元素个数很少或者有大量的重复值,如果直接保存保存,会浪费很多空间,这时,就可以考虑对数组进行压缩存储. 先定义一个稀疏数组 //创建一个二维数组 11 * 11 int ...

  6. 【Docker】10 容器存储

    将容器保存为一个镜像: docker commit 容器的名称 创建的镜像的名称 将镜像保存为一个tar包文件: docker save -o tar包文件名称.tar 镜像名称 可以看到Docker ...

  7. Google的TPU的运算数据类型最高为32比特,也就是说TPU不支持double数据类型,浮点数类型最高支持float32

    Google的TPU的运算数据类型最高为32比特,也就是说TPU不支持double数据类型,浮点数类型最高支持float32 地址: https://cloud.google.com/tpu/docs ...

  8. window系统多用户登录软件——ASTER——终端共享器——网络终端机

    Windows系统除了Server版其他的都是单用户系统,但是其实Windows系统都是内置支持多用户的,只不过除了Server版本以外的系统版本都是将多用户登录功能屏蔽掉了,如果我们可以解除掉win ...

  9. 7月新特性 | 软件开发生产线CodeArts发布多项新特性等你体验!

    华为云软件开发生产线CodeArts是一站式.全流程.安全可信的云原生DevSecOps平台,覆盖需求.开发.测试.部署.运维等软件交付全生命周期环节,为开发者打造全云化研发体验.2024年7月,Co ...

  10. 07-canvas绘制虚线

    1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="U ...