pinia - 为 antdv 表格添加加载状态
前言
我们之前制作的 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,
}
})
在页面中注册
scriptconst mainStore = useMainStore();
template
<a-table
...
:loading="mainStore.tableLoading"
>
由于我们之前在 mainStore.ts 中设置了 tableLoading 的值为 true,所以无论在何时 table 的状态都会是 loading

完善接口
我们现在已经可以使用 pinia 来控制全局变量的状态,但是总不能每次改变 table 的 loading 状态时都手动切换。还记得之前在定义 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 表格添加加载状态的更多相关文章
- Bootstrap 按钮(Button)插件加载状态
通过按钮(Button)插件,您可以添加进一些交互.比如控制按钮的状态.或者为其它组件(工具栏)创建按钮组. 加载状态 如需向按钮添加加载状态,只需要简单地向 button 元素添加 data-loa ...
- 【清单】值得「等待」的12个指示加载状态的 js 库
以下优选 GitHub 上高 star 的指示加载状态的 JavaScript 库.另外这里还有10个有意思的 JavaScript 实战小项目供大家学习. 上期入口:一份数据分析学习清单.xls M ...
- Bootstrap Table表格一直加载(load)不了数据-解决办法
bootstrap-table是一个基于Bootstrap风格的强大的表格插件神器,官网:http://bootstrap-table.wenzhixin.net.cn/zh-cn/ 这里列出遇到的一 ...
- 加载状态为complete时移除loading效果
一.JS代码: //获取浏览器页面可见高度和宽度 var _PageHeight = document.documentElement.clientHeight, _PageWidth = docum ...
- bootstrap按钮加载状态改变
bootstrap里面有个激活按钮的时候,按钮变成不可用的: 按照官网里面的方法介绍是在button按钮加个data-loading-text="Loading..."属性,然后j ...
- js 判断页面加载状态
//----判断当前页面是否加载状态 开始 ---- document.onreadystatechange = subSomething;//当页面加载状态改变的时候执行这个方法. function ...
- 动态加载JS文件,并根据JS文件的加载状态来执行自己的回调函数
动态加载JS文件,并根据JS文件的加载状态来执行自己的回调函数, 在很多场景下,我们需要在动态加载JS文件的时候,根据加载的状态来进行后续的操作,需要在JS加载成功后,执行另一方法,这个方法是依托在加 ...
- 表格重新加载 where 携带上次值问题
表格重载两种方式: 方式一: tableIns.reload(options) 注意这种方式的重载是不会携带上次数据加载时的where值 //使用 第一次渲染返回的对象 var table ...
- RxJava异步请求加载状态控制
在我看来,RxJava最大的特点就是异步,无论你是解析复杂的数据或是IO操作,我们都可以利用它内置的线程池进行线程间的调度,简单的使用 subscribeOn(Schedulers.io()).doO ...
- Report Server运行后一直处于加载状态
描述:对Report server做了一个小练习,算是入门,但发现运行起来后,页面一直处于加载状态,不知为何? 解决:查了一下网上的资料,解决的方法是 protected void Page_Load ...
随机推荐
- linux性能资源分析工具
linux性能资源分析工具 1,top 2,ps 3,uptime 4,mpstat 5,pidstat 6,vmstat 7,iostat 8,netstat 9,lsof 10,sar / nmo ...
- 强化学习:reward function shaping —— 着陆器(lander)游戏中的奖励函数的设计
lander 游戏是强化学习问题中常使用的一个游戏场景,不同人对该问题都设置了不同的reward function,一直也没有对该游戏的各种reward function的设计做一个记录,正好看视频看 ...
- java多线程之-自定义数据库连接池
1.背景 数据库链接池大家不陌生吧... 不多说了,直上代码... 2.连接池具体实现 1.jdbc链接的实例对象 /** * @author 姿势帝-博客园 * @address https://w ...
- [COCI 2023/2024 #3] Slučajna Cesta 题解
前言 期望套期望,很有意思.来一发考场首 A,近 \(\Theta(n)\) 的算法. 题目链接:洛谷. 题意简述 一棵树,每条边随机设有方向.对于所有 \(i\),从 \(i\) 开始随机游走,直到 ...
- SemanticKernel/C#:实现接口,接入本地嵌入模型
前言 本文通过Codeblaze.SemanticKernel这个项目,学习如何实现ITextEmbeddingGenerationService接口,接入本地嵌入模型. 项目地址:https://g ...
- 单链表-18个基本操作代码实现C语言
单链表-18个基本操作代码实现C语言 原文地址:https://www.cnblogs.com/actanble/p/6713434.html 无更改,仅复现 运行后如图,运行软件dev-C++,系统 ...
- 如何让您的 .NET应用程序更智能-- 请参加 8.20 的 .NET Conf -- Focus on AI
Microsoft 将于 2024 年 8 月 20 日举办免费的 .NET Conf: Focus on AI.该虚拟活动为开发人员提供了如何集成 .NET 和 AI 以增强应用程序开发和用户体验的 ...
- Linux驱动| Linux内核 RTC时间架构
上一篇文章我们给大家讲解了基于瑞芯微rk3568平台芯片hym8563驱动的移植,本文给大家详细讲解Linux内核的时间子系统. <Linux驱动|rtc-hym8563移植笔记> 一.L ...
- 移动端100vh的问题与解决方案
之所以100vh在移动端出现问题,原因大致如上图,真搞不懂,为什么总是有反人类的设计出现. 经过多方参考,实测有效的方案如下: <style> :root { --vh: 1vh; } & ...
- element-ui 表格控制列显隐简单方案
核心是使用v-if控制列的显隐 <template> <div> <div v-for="(item, index) in tables" :key= ...