axios添加缓存请求,防止多次请求,单页面多个同一组件造成多次请求解决方案

这篇具有很好参考价值的文章主要介绍了axios添加缓存请求,防止多次请求,单页面多个同一组件造成多次请求解决方案。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在 vue 开发中,我们偶尔会遇到相同组件多次调用一个请求的问题,即使添加了缓存,但在第一次调用时也会出现这类问题,这种问题的根源往往是由于第一个组件发起的请求没有返回数据,第二个组件没有在缓存中获取到数据而重新发起请求。
解决这种问题我们往往可以分两种:

  1. 修改组件,将要请求的数据单独提出来,在父组件中请求,然后通过属性赋值。但这种方式就会造成大量的相同代码,可以使用全局混入来解决相同代码问题,但是这也不够简洁,且不够灵活。
  2. 修改请求,添加缓存请求方法,将要发起的请求放到缓存中然后返回,使得相同请求使用同一个请求,等到返回数据后清除缓存。这种方式比较特殊,但能很好的解决问题,也不会产生过多的冗余代码。

具体使用见下方代码:

在axios中,添加

const cacheMap = {};

响应拦截添加

try {
  // 删除缓存
   const baseApi = res.config.url.replace(service.defaults.baseURL, "");
   let api;
   if (res.config.method === 'get') {
     api = baseApi + JSON.stringify(res.config.params);
   } else {
     api = baseApi + JSON.stringify(res.config.data);
   }
   if (cacheMap.hasOwnProperty(api)) {
     delete cacheMap[api];
   }
 } catch (err) {
 }

创建两个请求方法文章来源地址https://www.toymoban.com/news/detail-730514.html

/**
 * Get缓存请求
 */
export const cacheGet = async (api, params) => {
  if (api.indexOf("/") !== 0) {
    api = "/" + api;
  }
  const key = api + JSON.stringify(params);
  if (!cacheMap.hasOwnProperty(key)) {
    cacheMap[key] = service({
      url: api,
      method: 'get',
      params
    });
  }
  return cacheMap[key];
}

/**
 * Post缓存请求
 */
export const cachePost = async (api, data) => {
  if (api.indexOf("/") !== 0) {
    api = "/" + api;
  }
  const key = api + JSON.stringify(data);
  if (cacheMap.hasOwnProperty(key)) {
    cacheMap[key] = service({
      url: api,
      method: 'post',
      data
    });
  }
  return cacheMap[key];
}

到了这里,关于axios添加缓存请求,防止多次请求,单页面多个同一组件造成多次请求解决方案的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 优化axios封装之配置使用AbortController取消重复请求 防止用户频繁操作调用接口

    当数据量过大请求缓慢时用户点击按钮或者tab标签页快速重复调用同一个请求时,会导致数据错乱,当只需要最新的请求数据,并且中断上一个重复请求时,可以利用axios的CancelToken去中断之前的请求。 ps:由于不是所有请求都需要这个逻辑 所以我封装的时候增加了请求配置项

    2024年02月03日
    浏览(58)
  • axios添加请求头

    axios添加请求头 在前端开发中,我们经常需要使用ajax来发送HTTP请求。而axios是一个流行的基于Promise的HTTP客户端库,它可以轻松地与浏览器和Node.js中的HTTP API进行集成。在使用axios发送请求时,有时我们需要在请求中添加一些自定义的请求头。本文将为你介绍如何在axios中添加

    2024年02月05日
    浏览(37)
  • react通过axios发送请求并演示配置多个反向代理地址解决跨域

    这里 我们准备一个接口 我这里用java写了一个 然后 我们打开react项目 安装axios 然后在src下创建一个setupProxy.js 编写代码如下 可以看到 这里我们配了两个方向代理 如果请求的路中 包含api 就会代理成 http://localhost:8080/请求路径 如果包含user则会成为 http://localhost:808/请求路径 这

    2023年04月10日
    浏览(53)
  • ajax+axios——统一设置请求头参数——添加请求头入参——基础积累

    最近在写后台管理系统(我怎么一直都只写管理系统啊啊啊啊啊啊啊),遇到一个需求,就是要在原有系统的基础上,添加一个仓库的切换,并且需要把选中仓库对应的id以请求头参数的形式传递到每一个接口当中。。。 如上图所示:需要在接口请求头中添加一个 Storeid 参数

    2024年01月25日
    浏览(50)
  • 前端异步请求并解决跨域问题(Ajax+axios框架)、后端响应多个数据(JSON)

    目录 一、前后端同步异步请求 1.同步请求: 2.异步请求: 3.跨域问题(前端问题) 4.axios框架(封装后) 二、后端向前端响应多个数据-JSON 1.同步请求:         发送一个请求,回应请求,回应的内容会覆盖浏览器中的内容,这样会 打断 前端其他的正常操作。 2.异步请求:

    2024年02月07日
    浏览(71)
  • 关于Axios发送Get请求无法添加Content-Type

    在拦截器中尝试给headers添加Content-Type: 如果是GET请求,会发现请求头中无论如何加不上Content-Type,查看源码: 如果data未定义则会将Content-Type设置为null; 那么修改data,也是从网上查到的: 普通GET请求可以正常添加Content-Type,但是如果需要将Content-Type改成“multipart/form-data”

    2024年02月04日
    浏览(49)
  • vue+axios——创建多个实例共用请求拦截器和响应拦截器(403错误信息不提示bug解决)——基础积累

    创建多个实例共用请求拦截器和响应拦截器:使用的是函数的继承,也就是 call() 方法,这个方法第一个参数就是 this ,后面的参数可以是一个也可以是多个。最后一定要记得要 return 出去,否则接口是拿不到数据的。 上面两个文件合并后的处理如下: 在 main.js 中添加如下内容

    2024年02月10日
    浏览(50)
  • vue uniapp 防止按钮多次点击(类似于防抖节流)

    common文件并创建anti-shake.js文件 man.js文件中引入 页面里使用即可 不传参,直接传一个方法就行 带参数,传一个方法和一个参数就行 

    2024年02月11日
    浏览(38)
  • 前端页面使用axios请求后端接口,提示还未登陆。但是后端接口使用postman验证确实是可行的

    问题描述: 后端接口是有做对用户登陆状态的校验,使用postman进行测试,该接口功能可能,可以满足业务需求,但是前端使用axios请求时会提示用户还没有登陆,实际上,已经存储了session。 接口返回: 本地: 通过调试代码,基本可以确认是session的问题,前端和postman发起的

    2024年04月17日
    浏览(74)
  • element-ui,使用message防止多次提示,全局配置可关闭提示

    情景:在我们使用message的时候每次操作成功,或者进行一些数据交互的时候会进行message提示,但是假如出现我们操作完成要异步继续进行其他操作,或者多次调用接口时这个时候一直提示对用户是很不友好的,我们只需要让他提示最后一次即可; 1:在untils文件夹下创建  o

    2024年02月16日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包