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,
}
})
在页面中注册
script
const 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 ...
随机推荐
- iOS开发基础135-Core Data
Objective-C (OC) 中使用 Core Data 是iOS应用开发中管理模型层对象的一种有效工具.Core Data 使用 ORM (对象关系映射) 技术来抽象化和管理数据.这不仅可以节省 ...
- 计算复杂性学习笔记(TCS笔记)
感觉最近太摆了,每天很空虚,不愿意搞应试那一套,还是得学点东西.还是准备一边学tcs一边搞搞oi好打icpc,搞这个纯属兴趣,也是填个坑.最近进了一个初中生建的数学交流群,感觉群里初中生也很厉害,开始 ...
- 手把手教你集成GraphRag.Net:打造智能图谱搜索系统
在人工智能和大数据发展的背景下,我们常常需要在项目中实现知识图谱的应用,以便快速.准确地检索和使用信息. 今天,我将向大家详细介绍如何在一个新的.NET项目中集成GraphRag.Net,这是一个参考 ...
- WorPress基础之谷歌GSC与GA统计代码安装
本篇文章讲介绍什么是GSC和GA以及如何安装. 什么是GSC GSC,全称为Google Search Console,由谷歌官方提供的网站管理工具,可帮助监控和维护网站在Google 搜索结果中的展 ...
- scratch源码下载 | 飞天厨师
程序说明: <飞天厨师>是一款使用Scratch平台制作的游戏程序.在这个游戏中,玩家将控制一名厨师角色,他在天空中不断掉落.玩家需要利用方向键左右移动厨师,以便他能够准确地踩在空中的食物 ...
- web3的的入口,钱包,为什么说加密钱包是Web 3活动入口
Web3.0让未来充满了想象力,或许超越当今人类所知的互联网.有可能彻底改变人类社交互动.商业往来和整个互联网经济.同时数字加密货币行业从业者对Web 3.0赋予了很高期待,希望通过结合后打破互联网巨 ...
- 【OracleDB】 09 创建和管理表
Oracle常见的数据库对象 - 表 基本的数据存储集合,行与列组成 - 视图 抽取的逻辑集合 - 序列 提供规律性的数值 - 索引 提高查询效率 - 同义词 对象别名 TABLE 表 用户定义的表: ...
- CyberDog测试视频 —— 【开箱】小米"限量"机器狗!被我玩坏了...
地址: https://www.youtube.com/watch?v=3ntAhy3thXM PS. 现在的智能机器人其实真的没有人们想象中的那么智能.感觉现在的智能机器人最为有用的功能一个是倒地自 ...
- 如何在vscode中支持python的annotation(注解,type checking)——通过设置pylance参数实现python注解的type checking
pylance是vscode的python官方插件的捆绑体,如何在vscode中安装python插件这里不介绍了.pylance的默认设置是不支持python的annotation的,需要我们手动设置 ...
- 代码随想录Day22
77. 组合 给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合. 你可以按 任何顺序 返回答案. 示例 1: 输入:n = 4, k = 2 输出: [ [2,4], [ ...