React 查询在特定场合禁用加载?

React query disable loading in certain ocasion?

提问人:nick 提问时间:11/18/2023 更新时间:11/18/2023 访问量:25

问:

我有一个这样的查询:

const query = useMyCustomQuery({ ...someParams });

这在组件挂载时调用。

然后,在组件的返回中,我执行如下操作:

{ query.isFetching && <LoadingOverlay /> }

在其上显示加载组件。

现在我需要添加一个 每 30 秒重新取一次。 问题是加载将在重新获取时显示,我需要不要发生这种情况,因为我希望用户即使在重新获取时也能够看到项目列表。refetchInterval

我知道我可以将 to 更改为仅在第一次加载时显示它,但我还有其他用户触发的操作可以进行重新取取,我希望这些操作仍然具有加载指示器。isFetchingisLoading

有什么方法可以区分两者吗?

reactjs 反应查询

评论


答:

0赞 Aryan kholqi 11/18/2023 #1

useQuery() 有一个名为 keepPreviousData 的选项。此选项的作用是,如果您有来自服务器的数据,它将显示它们,直到您从服务器获取最新数据。对 https://tanstack.com/query/v4/docs/react/reference/useQuery 的引用

例如:

useQuery({
    queryKey: ["test"],
    queryFn: your_fetch_request,
    keepPreviousData
});
0赞 adsy 11/18/2023 #2

您可以更改为 but 此外,在要强制加载屏幕的用户操作上,您可以调用以将其设置回其初始状态,然后在事件处理程序中后跟 -- 。小心,因为是异步的。isLoadingqueryClient.resetQueries({ queryKey })refetchresetQueries

我相信这也会迫使回归。isLoading

通过这样做,您基本上是在删除之前获取的状态,但是由于您显示的是加载覆盖层,因此听起来您希望避免在强制刷新时显示任何过时的内容,因此这可能没问题。