gpt4 book ai didi

reactjs - 如何在拦截器中使用 Axios cancelToken?

转载 作者:行者123 更新时间:2023-12-04 04:07:23 27 4
gpt4 key购买 nike

在 ReactJs 中,我使用 Axios 从 API 获取数据。当我尝试发出重复请求时,我需要使用 cancelToken 。例如:假设我在完成 Axios 请求之前在主页上,我被请求访问关于页面。结果,React 应用程序显示内存泄漏错误。所以,我的计划是在Axios拦截器中设置Axios cancelToken。我试过了,但是对我不起作用。

requestApi.js


import axios from 'axios';

const requestApi = axios.create({
baseURL: process.env.REACT_APP_API_URL
});
const source = axios.CancelToken.source();

requestApi.interceptors.request.use(async config => {
const existUser = JSON.parse(localStorage.getItem('user'));
const token = existUser && existUser.token ? existUser.token : null;
if (token) {
config.headers['Authorization'] = token;
config.headers['cache-control'] = 'no-cache';
}

config.cancelToken = source.token;

return config;
}, error => {
return Promise.reject(error);
});

requestApi.interceptors.request.use(async response => {
throw new axios.Cancel('Operation canceled by the user.');
return response;
}, error => {
return Promise.reject(error);
});

export default requestApi;

Dashboard.js


import requestApi from './requestApi';

useEffect(() => {
const fetchData = async () => {
try {
const res = await requestApi.get('/dashboard');
console.log(res.data);
} catch (error) {
console.log(error);
}
}

fetchData();
}, []);

最佳答案

以防万一您仍然需要它,或者如果其他人来寻找它。这就是它对我有用的方式。

import axios from "axios";

// Store requests
let sourceRequest = {};

const requestApi = axios.create({
baseURL: process.env.REACT_APP_API_URL
});

requestApi.interceptors.request.use(
async config => {
const existUser = JSON.parse(localStorage.getItem("user"));
const token = existUser && existUser.token ? existUser.token : null;
if (token) {
config.headers["Authorization"] = token;
config.headers["cache-control"] = "no-cache";
}

return config;
},
error => {
return Promise.reject(error);
}
);

requestApi.interceptors.request.use(
request => {
// If the application exists cancel
if (sourceRequest[request.url]) {
sourceRequest[request.url].cancel("Automatic cancellation");
}

// Store or update application token
const axiosSource = axios.CancelToken.source();
sourceRequest[request.url] = { cancel: axiosSource.cancel };
request.cancelToken = axiosSource.token;

return request;
},
error => {
return Promise.reject(error);
}
);

export default requestApi;

关于reactjs - 如何在拦截器中使用 Axios cancelToken?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62274820/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com