javascript - 尽管 'enabled' 设置为 false,React Query 仍会继续重试
问题描述
我想设置我的查询,使其无限重试,除非它收到特定类型的错误,例如 404 或 401。我找不到使用 React Query API 的方法,但我想我可以提供一个回调设置enabled
为 false 到我的 fetch 包装器,如下所示:
async function fetchItems(onError) {
return fetch("https://pokeapi.co/api/v2/404").then(async (response) => {
if (response.ok) {
return await response.json();
} else {
if (response.status === 404) onError();
throw new Error(response.statusText);
}
});
}
export default function App() {
const [isEnabled, setIsEnabled] = useState(true);
const { data } = useQuery(
"data",
() => fetchItems(() => setIsEnabled(false)),
{
enabled: isEnabled,
retry: true
}
);
return <div>{data}</div>;
}
但是,这不起作用,尽管enabled
在第一次调用后立即设置为 false,它仍会继续重试。我做错了什么,它是否按设计工作或者我应该提交错误报告?
解决方案
retry 也有一个带有count
,error
参数的函数。如果函数 onretry
返回真值,查询将重新运行。这样,您需要在 fetch 函数中抛出状态并实现一个布尔逻辑,例如:
if (response.status === 404) onError();
throw new Error(response.status);
...
retry: (count, {message: status}) => (status !== '404' && status !== '401')
推荐阅读
- python-3.x - 给定开始日期和不同的持续时间,在 Python 中计算结束日期
- c++ - fmt std::string 显示为数字
- java - 在 websphere 分布式事务中使用 teradata 数据源
- php - Slim Framework 4 - 不在对象中时使用 $this (Medoo Framework) PHP
- arrays - 数据列表中的动态数组未显示
- java - 如何在 SSLContextBuilder.create().loadTrustMaterial 的 JUnit 测试中引发异常?
- php - 如何只允许数组中的数据进入输入字段?
- powershell - Powershell IE自动化如何传递标志来导航方法?
- macos - 如何在 Quartz 事件中读取鼠标增量?
- javascript - 显示 JSON 对象