可以使用 isFetching 属性来代替 isLoading 属性来监听查询是否正在获取数据。isFetching 属性是 React Query 提供的另一个属性,用来表示当前查询是否正在获取最新数据。当调用 invalidateQueries 方法时,它会将查询的 isFetching 属性设置为 true,表示当前查询正在获取最新数据。然后,在数据获取完成后,isFetching 属性会被重置为 false。
因此,如果想要监听查询是否正在获取最新数据,可以将 isFetching 属性绑定到组件的状态中,如下所示:
import { useQuery } from 'react-query';
function MyComponent() {
const { isFetching, data } = useQuery('myQueryKey', fetchMyData);
// 在这里可以根据 isFetching 状态展示不同的 UI 界面
return (
<div>
{isFetching ? 'Loading...' : data}
</div>
);
}
当调用 invalidateQueries 方法时,React Query 会将查询的 isFetching 属性设置为 true,从而更新组件的状态。然后,在数据获取完成后,isFetching 属性会被重置为 false,表示查询已经完成获取最新数据的操作。
tip:需要注意的是,isFetching 属性只能表示当前查询是否正在获取最新数据,它不能表示查询是否正在进行其他操作,例如缓存中获取数据或者使用预取。因此,在某些情况下,可能仍然需要使用 isLoading 属性来监听查询的状态。
例如:enabled为true时,isFetching的状态为false(不符合预期),isLoading的状态为true(符合预期)
参考答案:https://github.com/TanStack/query/issues/2559