当前位置: 首页 > 工具软件 > react-query > 使用案例 >

react-query invalidateQueries方法 无法触发 isLoading状态更新为true

姜智渊
2023-12-01

解决思路:用 isFetching 代替 isLoading

可以使用 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

 类似资料: