关于Vue路由切换时中断上一个路由请求情况的处理

开篇闲话

前两天做项目的时候遇到一个问题,那就是路由切换了但是上一个路由的请求依旧继续执行,导致页面卡顿,以及新的请求和之前请求一块发送非常影响性能。就想到了axios中可以使用cancelToken可以用来中断请求,于是记录下来以备不时之需(小白学习,还有很多不足,希望大佬可以指正!)

1、首先,由于我们要在store中对请求进行状态管理所以要在store中管理取消的请求操作 Store/index.js

在这里插入图片描述

2、然后在对axios进行二次封装,设置请求(request)和响应(response)的处理操作

(不要忘了导入store和导出axios,新手常犯得错误)axios.js
在这里插入图片描述

最后一步,就是监听路由切换,在路由表中设置路由守卫对路由进行监听,在路由切换时对上一个路由的请求进行中断

在这里插入图片描述

进行路由切换测试,如果看到如下结果,则证明路由请求中断成功

在这里插入图片描述
我也是借鉴大佬的写法,中间摸索了好久,至于原理还是很懵,只是处于实现业务逻辑的阶段。希望可以帮助到遇到类似问题的小伙伴
加油呀!

Vue路由切换,如果你想取消之前的所有请求操作,可以使用axios库的取消请求功能。 首先,在你的Vue项目安装axios库: ```shell npm install axios ``` 然后,在你的请求代码,创建一个axios的实例,并启用取消请求的功能: ```javascript import axios from 'axios'; // 创建axios实例 const instance = axios.create({ baseURL: 'https://api.example.com' // 替换为你的API地址 }); // 创建一个用于取消请求的取消令牌 const CancelToken = axios.CancelToken; let cancel; // 请求拦截器 instance.interceptors.request.use(config => { // 在每次请求前调用cancel函数取消之前的请求 if (cancel) { cancel(); } // 为每个请求添加取消令牌 config.cancelToken = new CancelToken(function executor(c) { cancel = c; }); return config; }, error => { return Promise.reject(error); }); export default instance; ``` 现在,你可以在Vue组件使用这个axios实例来请求,并在切换路由取消之前的请求: ```javascript import axios from '@/utils/axios'; export default { methods: { fetchData() { axios.get('/data') .then(response => { // 处理响应数据 }) .catch(error => { // 处理错误 }); } }, beforeRouteLeave(to, from, next) { // 在离开当前路由取消请求 axios.cancel(); next(); } } ``` 在上面的例子,我们在组件的`beforeRouteLeave`导航守卫调用了`axios.cancel()`函数来取消之前的请求。这样,当你切换路由,之前的请求将被取消。 这是一种基本的方法来取消之前的请求,你可以根据具体的业务需求进行适当的调整。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值