@orca-fe/hooks
Version:
React Hooks Collections
74 lines (73 loc) • 2.96 kB
TypeScript
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;