返回

查询重试-我们如何让React Query不轻易放弃?

前端

React Query是近几年非常流行的一个数据管理库,特别是在使用React进行开发时,React Query以其易用、强大、高效和高灵活性等优势深受开发者喜爱。

React Query提供了非常强大的缓存机制,能够非常有效的对我们的数据进行缓存。而另一个让我们感到非常惊艳的便是React Query的查询重试机制,有了这个机制,我们可以让我们的查询在遇到错误的时候自动重试,大大减少了我们手动重试的次数,提升了数据获取的效率和可靠性。

关于React Query查询重试的官方文档中,将查询重试为:当使用Query查询失败(查询函数抛出错误)时,如果该查询的请求未达到最大连续重试次数(默认为3),或者提供了一个函数来确定重试是否成功,React Query 将自动重试该查询。

这里我们可以看出两点:

  • React Query默认最大连续重试次数为3
  • 我们可以自定义函数来确定重试是否成功

如果我们想要配置默认的3次重试次数,我们可以这样写:

const queryClient = new QueryClient({
  defaultOptions: {
    queries: {
      retry: false,
    },
  },
})

而如果我们想要自定义最大重试次数,可以这样:

const queryClient = new QueryClient({
  defaultOptions: {
    queries: {
      retry: 5,
    },
  },
})

上面我们讲到了我们可以在React Query中自定义函数来确定重试是否成功,那么我们如何做呢?使用refetchOnMount属性我们可以很轻松的实现这一功能:

const queryClient = new QueryClient({
  defaultOptions: {
    queries: {
      refetchOnMount: false,
    },
  },
})

refetchOnMount为true时,如果一个Query在上一次请求完成后发生了错误,那么在重新渲染组件的时候,React Query会尝试再次发送请求,进行重试。而如果refetchOnMount为false时,组件重新渲染的时候将不会进行重试。

有时候,我们可能会遇到一种特殊的情况,一种很严重的情况,当我们遇到一个严重的错误,比如服务器端发生了500错误,我们可能并不想立刻重试我们的请求,而想要等上个一段时间,或者是想等待一些条件满足了以后再重试,那么我们可以通过重试间隔时间来控制,下面我们来看看:

const queryClient = new QueryClient({
  defaultOptions: {
    queries: {
      retryDelay: 5000,
    },
  },
})

在这个例子中,React Query会在重试前等待5秒,再进行重试。

需要注意的是,当重试间隔设置为大于等于5分钟(即300000毫秒)时,Query会自动禁用重试。

最后,我想再补充一点,在某些情况下,我们并不会想让React Query进行重试,而想让它停止重试,我们可以在Query组件中使用以下属性:

<Query
  queryKey="todo"
  queryFn={fetchTodo}
  retry={false}
/>

在上面的例子中,无论发生了什么错误,React Query都不会重试我们的查询请求。

好了,这就是关于React Query查询重试机制的全部内容了,希望你能有所收获。