4 回答

TA贡献1875条经验 获得超5个赞
我不确定我是否正确理解了这个问题。我假设您正在尝试获取用户数据,但如果失败您不想重试,这是正确的吗?
React Query 有一些默认值,对于新用户来说可能会很棘手。来自文档:
失败的查询会以静默方式重试 3 次,并在捕获错误并将其显示到 UI 之前进行指数退避延迟。
enabled
您还可以通过在useQuery挂钩上将 config 属性设置为 false 来停用自动请求,并使用该refetch
函数手动触发请求。

TA贡献1807条经验 获得超9个赞
如果你想在 api 请求失败后停止重试,你可以使用retryoption 并将其设置为 false
useQuery('',fn,{
retry:false
})
https://react-query-v3.tanstack.com/reference/useQuery#_top

TA贡献1864条经验 获得超6个赞
处理此问题的另一种方法是在查询选项中设置“enabled: false”,并且每当您希望调用 API 时,请使用重新获取。在你的情况下,它会是这样的:
const RouterController = () => {
const { data: updatedUser, isLoading, error: fetchError, refetch } = useQuery(
"user",
FetchCurrentUser,
{
enabled: false,
},
);
const handleClick = () => {
refetch();
}
}

TA贡献1841条经验 获得超3个赞
有一种简单的方法可以在所需数据准备好之前停止此 API 调用。您需要做的只是设置enabled: false,query options然后在数据准备好时将其设置为 true。
const RouterController = () => {
const { data: updatedUser, isLoading, error: fetchError } = useQuery(
"user",
FetchCurrentUser,
{
enabled: !!requiredData,
},
);
}
不过,我你的代码结构不是那么清晰。因此,我认为您的代码结构可能还有其他问题。
添加回答
举报