React Hooks 中的接口请求错误处理:如何正确地重新发起请求
import { useState } from 'react'; import { getUserTagList } from '\services\common';
interface CurrentUserType { appId: string; id: string; name: string; type1: string; type2: string; }
export default function useTenant() {
const [currentUserTag, setCurrentUserTag] = useState<Partial
const requestList = async () => { try { const { data } = await getUserTagList({}); setUserTagList(data?.userTagList || []); setCurrentUserTag(data?.currentUserTag); setErrorCount(0); // 每次请求成功时重置错误计数器 } catch (err) { if (err) { setErrorCount(errorCount + 1); // 请求出错时增加错误计数器 if (errorCount < 3) { // 当错误次数小于3时继续调用接口 requestList(); // 重新发起请求 } } } };
// useEffect(() => { // requestList(); // }, []);
return {
currentUserTag,
userTagList,
requestList,
};
}
为啥这样写还是一直在请求接口呢
根据代码逻辑分析,可能是因为在请求出错时,没有通过递归调用requestList函数来重新发起请求。在错误处理的部分,只是增加了错误计数器,但没有重新发起请求。可以尝试修改代码如下:
const requestList = async () => {
try {
const { data } = await getUserTagList({});
setUserTagList(data?.userTagList || []);
setCurrentUserTag(data?.currentUserTag);
setErrorCount(0); // 每次请求成功时重置错误计数器
} catch (err) {
if (err) {
setErrorCount(errorCount + 1); // 请求出错时增加错误计数器
if (errorCount < 3) { // 当错误次数小于3时继续调用接口
requestList(); // 重新发起请求
}
}
}
};
这样修改后,当请求出错时,将会通过递归调用requestList函数重新发起请求,直到错误次数达到3次为止。
原文地址: https://www.cveoy.top/t/topic/ptzJ 著作权归作者所有。请勿转载和采集!