普通视图

发现新文章,点击刷新页面。
昨天 — 2025年7月3日首页

useAsyncState 异步更新数据,在异步回调调用成功后再更新值

2025年7月3日 15:10

场景描述

image.png

当有需要切换状态并同时调用接口的情况下,为了体验更好,希望点击tab的时候并不真正的更新tab的状态,要直到接口调用成功后再更新。

因此就期望有如下代码,让这种异步更新数据的操作更简单明了。

const [activeKey, setActiveKey, activeKeyRef] = useAsyncState('wait', async (data) => {
  await reloadAsync(data)
})

代码

代码不多,就不过多讲解了

function useAsyncState <T>(
  initData: T,
  callback?: (data?: T) => void | Promise<void>
): [
  T,
  (data: T) => Promise<void>,
  React.RefObject<T>
] {
  const [data, setData] = useState<T>(initData)
  const tempRef = useRef<T>(initData)

  const setDataProxy = async (data: T) => {
    tempRef.current = data
    await callback?.(data)
    setData(data)
  }

  return [data, setDataProxy, tempRef]
}
❌
❌