React Query:获取查询状态
React Query: get query status
React Query 有一个有用的钩子,叫做 useIsFetching
(参见 docs),它允许检查给定的查询当前是否正在获取数据,如下所示:
const queryCount = useIsFetching(['my-query-name'])
我想做一些非常相似的事情:我想知道给定端点是否已经获取数据 (isFetched
)。
我知道这是从 useQuery
钩子返回的,但是使用这个钩子会再次调用端点,我想避免重复调用。
有什么实现方法吗?
您可以通过在查询中设置 staleTime
来避免再次调用端点,因为那时数据将仅来自缓存。
如果数据尚不存在,将获取它。如果您不想那样,请考虑 queryClient.getQueryState(['my-query-name'])
。但是,这将 不会 创建订阅,因此如果查询状态更改,您的组件将不会 re-render。
通过使用 useQuery
的 enabled
属性 解决,它允许定义是否发出请求。
useQuery(
['my-query-name', requestPayload],
() => callMyEndpoint(requestPayload),
{
// ...
enabled: booleanToIndicateWhetherToEnable,
}
)
React Query 有一个有用的钩子,叫做 useIsFetching
(参见 docs),它允许检查给定的查询当前是否正在获取数据,如下所示:
const queryCount = useIsFetching(['my-query-name'])
我想做一些非常相似的事情:我想知道给定端点是否已经获取数据 (isFetched
)。
我知道这是从 useQuery
钩子返回的,但是使用这个钩子会再次调用端点,我想避免重复调用。
有什么实现方法吗?
您可以通过在查询中设置 staleTime
来避免再次调用端点,因为那时数据将仅来自缓存。
如果数据尚不存在,将获取它。如果您不想那样,请考虑 queryClient.getQueryState(['my-query-name'])
。但是,这将 不会 创建订阅,因此如果查询状态更改,您的组件将不会 re-render。
通过使用 useQuery
的 enabled
属性 解决,它允许定义是否发出请求。
useQuery(
['my-query-name', requestPayload],
() => callMyEndpoint(requestPayload),
{
// ...
enabled: booleanToIndicateWhetherToEnable,
}
)