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 ...
随机推荐
- SpringBoot+ Sharding Sphere 轻松实现数据库字段加解密
一.介绍 在实际的软件系统开发过程中,由于业务的需求,在代码层面实现数据的脱敏还是远远不够的,往往还需要在数据库层面针对某些关键性的敏感信息,例如:身份证号.银行卡号.手机号.工资等信息进行加密存储, ...
- sharding-jdbc 兼容 MybatisPlus的动态数据源
背景:之前的项目做读写分离的时候用的 MybatisPlus的动态数据做的,很多地方使用的@DS直接指定的读库或者写库实现的业务:随着表数据量越来越大,现在打算把比较大的表进行水平拆分,准备使用 Sh ...
- cgroup限制进程cpu
编写一个死循环脚本 [root@workstation ~]# cat circle.sh #!/bin/bash a=1 while true do let a++ done 查看top 使用cgr ...
- 使用Java对稀疏数组的压缩与还原
稀疏矩阵的压缩与还原 稀疏数组中元素个数很少或者有大量的重复值,如果直接保存保存,会浪费很多空间,这时,就可以考虑对数组进行压缩存储. 先定义一个稀疏数组 //创建一个二维数组 11 * 11 int ...
- 【Uni-App】page.json 配置项一栏笔记
官方文档 https://uniapp.dcloud.io/collocation/pages 一些配置项是全局的,也可以在页面对象中设置 { "pages": [ //pages ...
- 【Vue】Re11 Vue 与 Webpack
一.案例环境前置准备: 创建一个空目录用于案例演示 mkdir vue-sample 初始化案例和安装webpack cd vue-sample npm install webpack@3.6.0 - ...
- python性能分析器:cProfile
代码: (1) import cProfile import re cProfile.run('re.compile("foo|bar")') 运行结果: (2) import c ...
- GPG公钥的删除与注销
参考: 如何在 Gitee 上使用 GPG 我们通过在本地主机保存GPG私钥,然后在Gitee或Github上保存GPG公钥的方式来实现对git的commit和tag操作的签名. 当GPG公私秘钥对作 ...
- 微信支付APIV3私钥与证书配置
1.加载商户私钥(privateKey:私钥字符串) 这个私钥是下载证书的的:apiclient_key.pem 2.转换下单时的证书 文档:https://github.com/wechatpay- ...
- 亚信科技基于 Apache SeaTunnel 的二次开发应用实践
亚信科技在Apache SeaTunnel的实践分享 自我介绍 各位同学好,很荣幸通过Apache SeaTunnel社区和大家进行分享交流.我是来自亚信科技的潘志宏,主要负责公司内部数据中台产品的开 ...