Vue 3 中 Axios 封装怎么结合 Pinia 管理全局请求加载状态

雨瑶大大_3542

雨瑶大大_3542

2026-09-25

932人浏览

原创

vue 3 中 axios 封装结合 pinia 管理全局请求加载状态,核心是将 loading 控制权移交 store 并通过拦截器联动生命周期;采用计数器式 loading 对象(如 loading: { user: 0, order: 0 })支持并发与粒度控制,配合 start(key)/finish(key) 方法和 isanyloading 计算属性,在请求拦截器中按白名单开启、响应拦截器中无论成败均关闭,组件仅订阅 store 状态,错误提示与 loading 完全解耦。

vue 3 中 axios 封装怎么结合 pinia 管理全局请求加载状态

Vue 3 中 Axios 封装结合 Pinia 管理全局请求加载状态,关键在于把 loading 控制权从组件移交给 store,再通过拦截器联动请求生命周期。不是简单开关一个布尔值,而是要应对并发、白名单、粒度控制等真实场景。

定义 Loading Store:支持并发与粒度控制

在 Pinia store 中声明 loading 状态,不只用 isLoading: boolean,而推荐使用对象结构或计数器,避免多个请求互相覆盖:

  • 基础方案(适合轻量项目):isLoading: boolean,配合请求池计数(+1 请求,−1 响应)
  • 进阶方案(推荐):loading: { user: 0, order: 0, list: 0 },按接口标识统计请求数,值 > 0 即为加载中
  • 提供统一方法:start(key) 和 finish(key),自动增减并同步更新全局 isAnyLoading 计算属性

在 Axios 拦截器中联动 store

请求拦截器负责“开启”,响应拦截器(含 error)负责“关闭”,且必须保证执行——用 try/finally 或拦截器的 fulfilled/rejected 双通道:

vue3-ant-design-vue-component-skill
vue3-ant-design-vue-component-skill

封装基于 Vue 3 + Ant Design Vue 的通用业务组件,提供标准化模板与最佳实践。

下载
  • 请求前:检查是否在白名单(如登录、上传等无需 loading 的接口),不在则调用 store.start(config.url || 'default')
  • 响应后:无论成功失败,都执行 store.finish(config.url || 'default');避免因网络中断、超时未进入响应拦截器导致 loading 残留
  • 注意:不要在拦截器里直接改 store.isLoading = false,而应调用封装好的 action,保持逻辑集中

组件中响应式绑定 loading 状态

组件不再维护自己的 isLoading,而是直接订阅 store 的计算状态:

  • 全局 loading(如顶部进度条、全屏遮罩):绑定 store.isAnyLoading
  • 局部 loading(如按钮、列表):绑定 store.loading.user > 0 或 store.loading['/api/order/list'] > 0
  • 搭配 UI 库更顺滑:Ant Design Vue 用 <a-spin :spinning="store.isAnyLoading"></a-spin>,Element Plus 用 <el-loading :v-loading="store.isAnyLoading"></el-loading>

补充:错误提示与 loading 解耦

loading 状态和错误提示不应强耦合。建议:

  • loading 仅反映“是否有请求正在进行”,由拦截器全自动控制
  • 错误提示单独处理:在响应拦截器中判断 response.data.code !== 200 或 error.response?.status,调用 message.error(),不干扰 loading 流程
  • 这样即使某个请求失败但其他还在跑,loading 仍保持开启,体验更真实

前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!

相关专题

更多
python是前端还是后端
python是前端还是后端

Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

2123

5

前端如何实现即时通讯
前端如何实现即时通讯

实现即时通讯的方法有WebSocket、Long Polling、Server-Sent Events、WebRTC等等。详细介绍:1、WebSocket,它可以在客户端和服务器之间建立持久连接,实现实时的双向通信,前端可以使用 WebSocket API来创建WebSocket连接,并通过发送和接收消息来实现即时通讯;2、Long Polling,是一种模拟实时通信的技术等等。

2023.10.09

4523

6

前端和后端的区别
前端和后端的区别

前端关注的是用户界面的设计和交互,而后端则注重数据处理和逻辑控制。想了解更多前端后端的相关内容,可以阅读本专题下面的文章。

2024.03.19

5670

13

php和前端的关联介绍
php和前端的关联介绍

php既可以作为前端语言,也可以作为后端语言。想了解更多php和前端的相关内容,可以阅读本专题下面的文章。

2024.03.22

5118

10

前端外包工作内容有哪些
前端外包工作内容有哪些

前端外包工作内容包括:1. 网站和应用程序开发;2. 用户界面和交互设计;3. 用户体验优化;4. 设计和视觉开发;5. 跨浏览器兼容性;6. 性能优化;7. 维护和更新;8. 项目管理和沟通。想了解更多前端的相关内容,可以阅读本专题下面的文章。

2024.05.22

723

5

vue2.0和3.0区别
vue2.0和3.0区别

vue2.0和3.0区别:vue2的响应式原理是利⽤“Object.defineProperty()”对数据进⾏劫持结合发布订阅模式的⽅式来实现,vue3中使⽤了es6的proxy API对数据代理,实现对数据的监控。本专题为大家提供vue2.0和3.0区别的相关的文章、下载、课程内容,供大家免费下载体验。

2023.07.17

1614

5

vue3的生命周期有哪些
vue3的生命周期有哪些

vue3的生命周期:1、beforecreate;2、created;3、beforemount;4、mounted;5、beforeupdate;6、updated;7、beforedestroy;8、destroyed;9、activated;10、deactivated等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.02.23

11682

5

Vue3组合式API与组件开发实战
Vue3组合式API与组件开发实战

本专题讲解 Vue 3 组合式 API 的核心概念与应用技巧,深入分析响应式系统、生命周期管理、组件设计与复用策略。通过完整项目案例,指导前端开发者实现高性能、结构清晰的 Vue 应用,提升开发效率与代码可维护性。

2026.02.10

276

23

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Vue 教程
Vue 教程

共42课时 | 16.8万人学习

国外Web开发全栈课程全集
国外Web开发全栈课程全集

共12课时 | 1.4万人学习

Vue.js 微实战--十天技能课堂
Vue.js 微实战--十天技能课堂

共18课时 | 1.7万人学习