import { useCallback, useState } from 'react'; /** * 异步请求状态 */ export interface AsyncState { data: T | null; loading: boolean; error: Error | null; } /** * 异步请求 Hook * 用于管理异步请求的加载状态、数据和错误 */ export function useAsync() { const [state, setState] = useState>({ data: null, loading: false, error: null, }); const execute = useCallback(async (asyncFunction: () => Promise) => { setState({ data: null, loading: true, error: null }); try { const result = await asyncFunction(); setState({ data: result, loading: false, error: null }); return result; } catch (error) { const err = error instanceof Error ? error : new Error(String(error)); setState({ data: null, loading: false, error: err }); throw err; } }, []); const reset = useCallback(() => { setState({ data: null, loading: false, error: null }); }, []); return { ...state, execute, reset, }; } export default useAsync;