如何在 Vue Store 中封装通用的 API 缓存逻辑?

轻辰酱_7487

轻辰酱_7487

2026-06-18

893人浏览

原创

vue store 中封装通用 api 缓存应让请求层(如 axios)自主管理缓存,store 仅消费数据;通过 url、参数、method 生成唯一 key,区分 sessionstorage(页面级)、localstorage(业务级)及服务端协同缓存,并提供 cacheapi 高阶函数与 invalidatecache 清除机制。

如何在 vue store 中封装通用的 api 缓存逻辑?

在 Vue Store 中封装通用 API 缓存逻辑,关键不是把缓存塞进 Vuex/Pinia 的 state 里,而是让请求层自带缓存能力,并与 store 解耦又可协同。核心思路是:缓存行为发生在 API 调用前/后,由统一的请求实例控制,store 只负责消费数据、触发更新,不参与缓存决策。

用 axios 实例 + 缓存键生成策略

缓存有效性取决于「请求唯一性」。需基于 URL、参数(含 query 和 body)、method 生成稳定 key:

  • GET 请求:拼接 baseURL + path + JSON.stringify(sortedQuery)
  • POST/PUT 等:对请求体做 JSON.stringify(sortObject(body)) 后哈希(如用 murmurhash3)
  • 避免缓存敏感操作:带 token、时间戳、随机数的请求默认跳过缓存,或显式加 cache: false 标记

分层缓存适配不同场景

单一 localStorage 不够用,应按生命周期和作用域区分:

Ainative Vue Sdk
Ainative Vue Sdk

使用 `@ainative/vue-sdk` 为 Vue 3 应用添加 AI 聊天功能。适用于以下场景:(1) 安装 `@ainative/vue-sdk`,(2) 在 Vue 组件中使用 `useChat` 组合式函数,(3) 提供……

下载
  • 短期页面级缓存:用 sessionStorage 存响应数据 + 过期时间戳,适合搜索结果、表单预填等,关闭标签即失效
  • 长期业务级缓存:用 localStorage + 版本号(如 api_v2_user_profile),配合接口返回的 cache-control 或自定义 maxAge 字段自动清理
  • 服务端协同缓存:在 axios 拦截器中透传 Cache-Control、If-None-Match,让 CDN 或中间件参与,store 层无感但实际提速

封装成可复用的 cacheApi 工具函数

不侵入 store,而是导出一个高阶函数,让各模块 API 调用时按需启用缓存:

  • 定义 cacheApi(fn, options = { maxAge: 60_000, storage: 'local' }),接收原始请求函数(如 getUser(id))
  • 内部自动计算 key,读取对应 storage;命中则直接 resolve 缓存值;未命中则执行原函数,写入缓存后返回
  • 在 API 模块中这样使用:export const getCachedProduct = cacheApi(productApi.getProduct, { maxAge: 300_000 })

与 Pinia/Vuex 协同更新状态

缓存是副作用,store 仍应保持响应式驱动。推荐模式:

  • 组件中 dispatch action 时,先调用缓存版 API 获取数据,再 commit 到 store
  • action 内部可判断是否「强制刷新」(如下拉刷新),跳过缓存直连网络
  • 全局提供 invalidateCache(keyPattern) 方法,当数据变更(如编辑成功)时主动清除相关 key,保证一致性

大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

vue

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

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

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

2023.08.11

2543

5

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

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

2023.10.09

5483

6

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

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

2024.03.19

6510

13

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

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

2024.03.22

6138

10

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

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

2024.05.22

883

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

1694

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

12142

5

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

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

2026.02.10

316

23

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
uni-app快速上手
uni-app快速上手

共0课时 | 0人学习

Vue 教程
Vue 教程

共42课时 | 17.1万人学习

Vue3.x 工具篇--十天技能课堂
Vue3.x 工具篇--十天技能课堂

共26课时 | 2.5万人学习