@livelybone/use-async-data
Version:
A react hook for deal data that generated asynchronously
43 lines (39 loc) • 1.11 kB
TypeScript
import { Dispatch, SetStateAction } from 'react'
declare type DataTuple<T extends any, Args extends any[]> = [
/**
* Data
* */
T,
/**
* A wrapped function for fetch data
* It realized auto-updating of `data` and auto-updating of `isFetching`
* */
(...args: Args) => Promise<T>,
/**
* Is fetching
* */
boolean,
/**
* Be used to update data manually
* */
Dispatch<SetStateAction<T>>,
]
declare type TruthyOrFalsy = any
declare type ShouldResetData = PromiseLike<TruthyOrFalsy> | TruthyOrFalsy
declare function useAsyncData<T extends any, Args extends any[] = []>(
api: (...args: Args) => PromiseLike<T>,
initialValue: T | (() => T),
errorCb: (err: any) => ShouldResetData,
): DataTuple<T, Args>
declare function useAsyncData<
T extends any,
ApiRes extends any,
Args extends any[] = []
>(
api: (...args: Args) => PromiseLike<ApiRes>,
initialValue: T | (() => T),
errorCb: (err: any) => ShouldResetData,
dealFn: (result: ApiRes, preData: T) => T,
): DataTuple<T, Args>
export default useAsyncData
export { DataTuple, ShouldResetData, TruthyOrFalsy }