UNPKG

@orca-fe/hooks

Version:

React Hooks Collections

74 lines (73 loc) 2.96 kB
import type { Dispatch, SetStateAction } from 'react'; import React from 'react'; export type FetchResult<T = any> = { data: T; }; export declare const isFetchResult: (value: any) => value is FetchResult<any>; export interface ServiceHandler<Args extends any[], Result> { /** 发起新的请求 */ run: (...args: Args) => Promise<Result | undefined>; /** 本次请求的结果 */ data: Result | undefined; /** 异常(如果报错) */ error: any; /** 正在请求状态 */ loading: boolean; /** 本次请求所使用的参数 */ params: Args | undefined; /** 刷新上一次请求 */ refresh: () => Promise<Result | undefined>; /** 修改接口的结果 */ mutate: (result: SetStateAction<Result>) => void; /** 取消本次未完成的请求 */ cancel: () => void; } export interface ContextOptions { /** 是否手动发起第一次请求 */ manual?: boolean; /** 轮询间隔 */ pollingInterval?: number; /** 在页面隐藏时,是否继续轮询 */ pollingWhenHidden?: boolean; /** 如果请求失败,是否维持之前的结果,默认为 true */ keepSuccessData?: boolean; /** 如果請求的結果是 Error 則視為拋出異常。 */ throwOnError?: boolean; } export declare const UseServiceContext: React.Context<ContextOptions>; export interface ServiceOptions<Args extends any[], ServiceResult, Result = ServiceResult> extends ContextOptions { /** 默认结果 */ initialData?: Result; /** 初始化时的参数 */ defaultParams?: Args; /** 请求成功时的回调事件 */ onSuccess?: (data: Result, params: Args) => void; /** 請求結束后的回調事件(不論數據處理是否正常) */ onFinish?: (data: ServiceResult, params: Args) => void; /** 请求失败时的回调事件 */ onError?: (error: Error, params: Args) => void; /** 请求缓存的标识 */ cacheKey?: string; /** 对结果进行格式化处理(默认会取出 result.data) */ formatter?: (res: ServiceResult) => Result; stateMgr?: { state: ServiceState<Args, Result>; setState: Dispatch<SetStateAction<ServiceState<Args, Result>>>; }; } export type Service<Args extends any[], Result> = (...args: Args) => Promise<Result>; export type ServiceState<Args extends any[], Result> = { loading?: boolean; data?: Result; error?: any; params?: Args; }; export type ServiceAttr = { unloaded: boolean; ticket: number; loading: boolean; }; export type FetchResultData<T> = T extends FetchResult<infer P> ? P : T; export declare function defaultFormatter<T>(res: T): FetchResultData<T>; export declare function useService<Args extends any[], ServiceResult = any, Result = FetchResultData<ServiceResult>>(_service: Service<Args, ServiceResult>, options?: ServiceOptions<Args, ServiceResult, Result>): ServiceHandler<Args, Result>; export default useService;