1

我想让我的 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 对象,该对象具有retryUI 代码可以使用的函数来显示 toast 以便稍后重试操作(在用户交互时)。

我想知道当时retry()是否会调用 setFavourite 的依赖项仍然有效。我猜不是,因为它们依赖于data并且如果这种变化,那么setFavourite也会重新生成。

以前有人实施过这种重试吗?

4

0 回答 0