【问题标题】:react-query: don't refetch on an interval if there is an errorreact-query:如果有错误,不要在间隔内重新获取
【发布时间】:2021-07-13 09:02:43
【问题描述】:

我正在按时间间隔重新获取 API,但如果出现错误,我想停止它。

  const { status, data, error, isFetching } = useQuery(
    'todos',
    // only refetch if there is no error
    async () => {
      const res = await axios.get('/api/data')
      return res.data
    },
    {
      refetchInterval: intervalMs,
    }
  )

我可以将status.isError 存储在状态变量中,然后将其与enabled 一起使用,但这似乎有点笨拙。通过文档,我找不到任何有用的信息。

【问题讨论】:

  • 我认为这就是你必须要做的。我很确定 react-query 的要点之一是不断重新获取
  • @RichardHpa 是的,很有可能。我可能可以创建一个调用 react-query 并具有包含错误的 useState 的钩子。尽管如此,还是想知道是否有什么东西不会引入这种复杂性。
  • 我必须对只想运行一次或手动重试的查询做同样的事情
  • @RichardHpa 你为什么不禁用retry
  • 您必须关闭 4 个不同的选项来关闭重试、refetchOnMount、refetchOnReconnect、refetchOnWindowFocus,它们都需要为 false。所以为了避免我不得不多次写这些,我只是为它做了一个钩子

标签: javascript reactjs react-query


【解决方案1】:

最好的方法确实是通过本地状态来完成,但如果您不想禁用查询,则无需禁用 - 只需将 refetchInterval 设置回 0 也可能就足够了:

const [refetchInterval, setRefetchInterval] = useState(intervalMs)

useQuery(
  key,
  queryFn,
  {
    refetchInterval,
    onError: () => setRefetchInterval(0)
  }
)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-01-30
    • 1970-01-01
    • 2021-06-19
    • 1970-01-01
    • 1970-01-01
    • 2021-12-08
    • 2022-09-23
    • 2022-08-04
    相关资源
    最近更新 更多