查询重试-我们如何让React Query不轻易放弃?
2024-02-20 19:50:50
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查询重试机制的全部内容了,希望你能有所收获。