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 [userTagList, setUserTagList] = useState<CurrentUserType[]>([]); const [errorCount, setErrorCount] = useState(0); // 错误计数器

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次为止。

React Hooks 中的接口请求错误处理:如何正确地重新发起请求

原文地址: https://www.cveoy.top/t/topic/ptzJ 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录