Ajax 请求的如何优雅的 loading

2021-04-23 10:50:24 +08:00
 lqzhgood

Ajax 请求前总是要需要一个 loading 变量来

那么这个 loading 的最佳实践是啥? 每一个 Ajax 都要写一个 loading, 感觉每次重复写很蛋疼,

用 vue 写个示例代码

<template>
	<div>
		<div class="del" v-loading="loading.del"></div>
		<div class="list" v-loading="loading.list"></div>
	</div>
</template>
<script>
export default {
	name: '',
	data: () => ({
		loading: {
			del: false,
			list: false,
		},
	}),
    methods:{
        ajaxDel(){
            const {loading} = this;  // <--- 这一坨
            if (loading.del) return ; // <--- 这一坨
            loading.del = true; // <--- 这一坨

            ajax.get('/del')
                .then(() => {...})
                .catch(() => {...})
                .finally(() => {
                    loading.del = false;  // <--- 这一坨
                })
        },
        ajaxDel(){
            const {loading} = this;
            if (loading.list) return ;
            loading.list = true;

            ajax.get('/list')
                .then(() => {...})
                .catch(() => {...})
                .finally(() => {
                    loading.list = false;
                })
        }
    }
};
</script> 

2113 次点击
所在节点    JavaScript
6 条回复
John60676
2021-04-23 11:07:19 +08:00
☺️用第三方库来管理,例如我最近写的 [VueRequest]( https://www.attojs.com/),一个能轻松帮你管理请求状态(支持 SWR,轮询,错误重试,缓存,分页等)的 Vue 3 请求库 。

你说的 loading 内部就帮你解决了

github: https://github.com/AttoJS/vue-request
kop1989
2021-04-23 11:23:14 +08:00
自己封装一个符合自己需求的 ajax 方法不就 ok 了。
lqzhgood
2021-04-23 11:25:32 +08:00
@John60676 3Q 我试试~
lqzhgood
2021-04-23 11:31:31 +08:00
@kop1989 当然得封装, 关键是封装的最佳实践是啥咯~

loading 状态需要写两次,如果把 loading 做对象整个做入参又很别扭
christin
2021-04-23 14:21:17 +08:00
我看过写在拦截器里的 用 vuex 开启和关闭 loading 再加一个防抖防止多次请求中间 loading 闪烁
lqzhgood
2021-04-25 09:16:12 +08:00
@christin 全局的 loading 用 vuex 处理没关系~
页面上面的局部 loading 用 vuex 就不合适了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/772662

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX