【发布时间】:2022-06-22 20:23:02
【问题描述】:
我有一些请求可能会返回 404。当他们这样做时,RTK 查询将发送重试,导致数百个失败的请求。为什么它会尝试重新获取错误,我该怎么办?
【问题讨论】:
我有一些请求可能会返回 404。当他们这样做时,RTK 查询将发送重试,导致数百个失败的请求。为什么它会尝试重新获取错误,我该怎么办?
【问题讨论】:
如果你的endpoint出错,RTK Query的useQuery会在两种情况下发送请求:
useQuery 安装组件。因此,如果没有看到您的代码,我会假设您的组件以某种方式重新安装,因此在安装后会导致另一个请求。
【讨论】:
作为docs say,对于自定义错误处理,我们可以使用queryFn:
使用不同错误处理行为的一次性查询
因此,如果出于任何原因,您想缓存错误请求,您可以这样做:
getPokemon: build.query<Pokemon, string>({
async queryFn(name, api, extraOptions, baseQuery) {
const result = await baseQuery({
url: `https://pokeapi.co/api/v2/pokemon/${name}`,
method: 'GET'
});
if (result.error?.status === 404) {
// don't refetch on 404
return { data: result.data as Pokemon };
}
if (result.error) {
// but refetch on another error
return { error: result.error };
}
return { data: result.data as Pokemon };
}
}),
【讨论】: