尽管 '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>;
}

Sandbox

但是,这不起作用,尽管 enabled 在第一次调用后立即设置为 false,但它会继续重试。我做错了什么,它是否按设计工作,或者我应该提交错误报告?

retry 也接受带有 counterror 参数的函数。如果 retry returns 上的函数为真,查询将重新运行。这样你需要在你的获取函数中抛出状态并实现一个布尔逻辑,如:

if (response.status === 404) onError();
throw new Error(response.status);
...
retry: (count, {message: status}) => (status !== '404' && status !== '401')