尽管 'enabled' 设置为 false,React Query 仍在重试
React Query keeps retrying despite 'enabled' set to false
我想设置我的查询,以便它无限重试,除非它收到特定类型的错误,例如 404 或 401。我找不到使用 React Query 来完成此操作的方法 API,但我想我可以像这样为我的获取包装器提供一个回调设置 enabled
为 false:
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
参数的函数。如果 retry
returns 上的函数为真,查询将重新运行。这样你需要在你的获取函数中抛出状态并实现一个布尔逻辑,如:
if (response.status === 404) onError();
throw new Error(response.status);
...
retry: (count, {message: status}) => (status !== '404' && status !== '401')
我想设置我的查询,以便它无限重试,除非它收到特定类型的错误,例如 404 或 401。我找不到使用 React Query 来完成此操作的方法 API,但我想我可以像这样为我的获取包装器提供一个回调设置 enabled
为 false:
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
参数的函数。如果 retry
returns 上的函数为真,查询将重新运行。这样你需要在你的获取函数中抛出状态并实现一个布尔逻辑,如:
if (response.status === 404) onError();
throw new Error(response.status);
...
retry: (count, {message: status}) => (status !== '404' && status !== '401')