我想让我的 swr 状态突变能够抵御网络错误并支持某种重试功能。
基本上我所做的是在我的 useSWR 驱动的反应钩子中:
const setFavourite = useCallback((objectId) => {
const url = `/favs/${objectId}`
const newData = [objectId, ...data]
return mutate(newData, false)
.then(() => request("POST", url))
.then(() => mutate())
.catch((error) => {
mutate(data, false).catch(() => {})
const userError = new Error("Could not add favourite")
userError.retry = () => setFavourite(objectId)
})
}, [data, mutate, request])
我生成了一个新的 Error 对象,该对象具有retry
UI 代码可以使用的函数来显示 toast 以便稍后重试操作(在用户交互时)。
我想知道当时retry()
是否会调用 setFavourite 的依赖项仍然有效。我猜不是,因为它们依赖于data
并且如果这种变化,那么setFavourite
也会重新生成。
以前有人实施过这种重试吗?