React Query:我可以使用 React Query 进行轮询,直到获得某些数据吗?

问题描述 投票:0回答:2

我想实现长轮询,直到我从 API 获取某些数据。

例如,假设我们有一个返回进程进度的 API。 我想调用该 API,直到该过程完成。

是否可行?如果可行,我该如何实施?

reactjs long-polling react-query
2个回答
24
投票

我们已经为该用例准备了PR,一旦我们发货,您就可以:

const query = useQuery(
  key,
  fn,
  {
    refetchInterval: (data) => !data || data.progress < 100 ? 5000 : undefined
  }
)

api 尚未最终确定,我希望得到一些实际的意见:)


在那之前,您需要使用本地状态来处理此问题:

const [refetchInterval, setRefetchInterval] = React.useState(5000)
const query = useQuery(
  key,
  fn,
  {
    refetchInterval,
    onSuccess: (data) => {
        if (data.progress === 100) {
          setRefetchInterval(false)
        }
    }
  }
)


0
投票

采用@TkDodo对react-query v5的答案:

const query = useQuery(
  key,
  fn,
  {
    refetchInterval: (query) => {
      return !query.state.data || query.state.data.progress < 100 ? 5000 : undefined
    }
  }
)

这是由于重大更改所致:refetchInterval 回调函数仅获取传递的查询(请参阅文档以了解注意事项)。

© www.soinside.com 2019 - 2024. All rights reserved.