hooks icon indicating copy to clipboard operation
hooks copied to clipboard

[useRequest]竞态取消机制与cache

Open baixiaoyu2997 opened this issue 1 year ago • 3 comments

竞态取消并不是真的取消发送请求,那么既然请求已经发送,返回值应该可以被缓存

const { data, runAsync, loading, error } = useRequest(getBusinessEntityWalletList, {
    manual: true,
    cacheKey: '123',
    staleTime: 15000,
    onSuccess(data, params) {
      console.log('==========success', params)
    },
  })

  useEffect(() => {
    setTimeout(() => {
      const asyncFn = async () => {
        console.log('=========run')
        runAsync({ Page: 1, PageSize: 20 })
        runAsync({
          ...{ Page: 1, PageSize: 20 },
          Page: 2,
        })
      }

      asyncFn()
    }, 3000)
  }, [])

setCache的时机在onSuccess和onMutate时才触发,引用:https://github.com/alibaba/hooks/blob/c7bb04c42bd8800164a112fd448c263bd16b63d4/packages/hooks/src/useRequest/src/plugins/useCachePlugin.ts#L106

但是因为竞态取消机制导致onSuccess只执行一次, 也就是说没办法缓存第一个请求的返回值,这里是否可以改进一下?

baixiaoyu2997 avatar Nov 18 '24 09:11 baixiaoyu2997

这个不好搞,data 只有一份,之前的存哪里呢

crazylxr avatar Dec 05 '24 01:12 crazylxr

这个不好搞,data 只有一份,之前的存哪里呢

在自定义cache的时候是有意义的,因为我可以根据不同的参数来保存数据到localStorage, 这样我在其他组件中如果也触发了相同参数的请求会命中缓存。

这并不算是一个bug, 只是一种建议,或许应该转移到Discussion, 如果你觉得不合理可以随时关闭该issue

baixiaoyu2997 avatar Dec 05 '24 01:12 baixiaoyu2997

可以自己写个单例用map存这数据

fnlearner avatar Dec 09 '24 03:12 fnlearner