@alova/scene-react
Version:
scenario react hooks with alova.js
605 lines (572 loc) • 24.6 kB
TypeScript
import {
AlovaMethodHandler,
AlovaRequestAdapter,
CompleteHandler,
ErrorHandler,
FrontRequestState,
Method,
Progress,
RequestHookConfig,
StatesHook,
SuccessHandler,
updateState,
UseHookReturnType,
WatcherHookConfig
} from 'alova';
import GlobalFetch from 'alova/GlobalFetch';
import { DependencyList, Dispatch, SetStateAction } from 'react';
import {
AccessAction,
ActionDelegationMiddleware,
AlovaRequestAdapterUnified,
AutoRequestHookConfig,
BeforeSilentSubmitHandler,
CaptchaHookConfig,
CaptchaReturnType,
ClientTokenAuthenticationOptions,
FormHookConfig,
FormHookHandler,
FormReturnType,
IsUnknown,
NotifyHandler,
OffEventCallback,
PaginationHookConfig,
RetriableHookConfig,
RetriableReturnType,
ServerTokenAuthenticationOptions,
SilentFactoryBootOptions,
SilentMethod,
SilentQueueMap,
SilentSubmitBootHandler,
SilentSubmitErrorHandler,
SilentSubmitFailHandler,
SilentSubmitSuccessHandler,
SQHookReturnType,
SQRequestHookConfig,
SSEHookConfig,
SSEReturnType,
TokenAuthenticationResult,
UnbindHandler
} from './general';
type ReactState<S> = [S, Dispatch<SetStateAction<S>>];
type UsePaginationReturnType<S, E, R, T, RC, RE, RH, LD extends unknown[]> = Omit<
UseHookReturnType<S, E, R, T, RC, RE, RH>,
'data' | 'update'
> & {
page: ReactState<number>;
pageSize: ReactState<number>;
data: IsUnknown<
LD[number],
R extends {
data: any;
}
? R['data']
: LD,
LD
>;
pageCount: number | undefined;
total: number | undefined;
isLastPage: boolean;
fetching: boolean;
onFetchSuccess: (handler: SuccessHandler<S, E, R, T, RC, RE, RH>) => void;
onFetchError: (handler: ErrorHandler<S, E, R, T, RC, RE, RH>) => void;
onFetchComplete: (handler: CompleteHandler<S, E, R, T, RC, RE, RH>) => void;
update: (newFrontStates: Partial<FrontRequestState<boolean, LD, Error | undefined, Progress, Progress>>) => void;
/**
* 刷新指定页码数据,此函数将忽略缓存强制发送请求
* 如果未传入页码则会刷新当前页
* 如果传入一个列表项,将会刷新此列表项所在页
* @param pageOrItemPage 刷新的页码或列表项
*/
refresh: (pageOrItemPage?: number | LD[number]) => void;
/**
* 插入一条数据
* 如果未传入index,将默认插入到最前面
* 如果传入一个列表项,将插入到这个列表项的后面,如果列表项未在列表数据中将会抛出错误
* @param item 插入项
* @param indexOrItem 插入位置(索引)或列表项
*/
insert: (item: LD extends any[] ? LD[number] : any, indexOrItem?: number | LD[number]) => void;
/**
* 移除一条数据
* 如果传入的是列表项,将移除此列表项,如果列表项未在列表数据中将会抛出错误
* @param position 移除的索引或列表项
*/
remove: (position: number | LD[number]) => void;
/**
* 替换一条数据
* 如果position传入的是列表项,将替换此列表项,如果列表项未在列表数据中将会抛出错误
* @param item 替换项
* @param position 替换位置(索引)或列表项
*/
replace: (item: LD extends any[] ? LD[number] : any, position: number | LD[number]) => void;
/**
* 从第一页开始重新加载列表,并清空缓存
*/
reload: () => void;
};
/**
* 基于alova.js的react分页hook
* 分页相关状态自动管理、前后一页预加载、自动维护数据的新增/编辑/移除
*
* @param handler method创建函数
* @param config pagination hook配置
* @returns {UsePaginationReturnType}
*/
declare function usePagination<S, E, R, T, RC, RE, RH, LD extends unknown[], WS extends DependencyList>(
handler: (page: number, pageSize: number) => Method<S, E, R, T, RC, RE, RH>,
config?: PaginationHookConfig<S, E, R, T, RC, RE, RH, LD, WS>
): UsePaginationReturnType<S, E, R, T, RC, RE, RH, LD>;
/**
* 带silentQueue的request hook
* silentQueue是实现静默提交的核心部件,其中将用于存储silentMethod实例,它们将按顺序串行发送提交
*/
declare function useSQRequest<S, E, R, T, RC, RE, RH>(
handler: AlovaMethodHandler<S, E, R, T, RC, RE, RH>,
config?: SQRequestHookConfig<S, E, R, T, RC, RE, RH>
): SQHookReturnType<S, E, R, T, RC, RE, RH>;
declare function bootSilentFactory(options: SilentFactoryBootOptions): void;
declare function onSilentSubmitBoot(handler: SilentSubmitBootHandler): OffEventCallback;
declare function onSilentSubmitSuccess(handler: SilentSubmitSuccessHandler): OffEventCallback;
declare function onSilentSubmitError(handler: SilentSubmitErrorHandler): OffEventCallback;
declare function onSilentSubmitFail(handler: SilentSubmitFailHandler): OffEventCallback;
declare function onBeforeSilentSubmit(handler: BeforeSilentSubmitHandler): OffEventCallback;
declare function dehydrateVData<T>(target: T): T;
declare function stringifyVData(target: any, returnOriginalIfNotVData?: boolean): any;
declare function isVData(target: any): boolean;
declare function equals(prevValue: any, nextValue: any): boolean;
declare function filterSilentMethods(
methodNameMatcher?: string | number | RegExp,
queueName?: string,
filterActive?: boolean
): SilentMethod[];
declare function getSilentMethod(
methodNameMatcher?: string | number | RegExp,
queueName?: string,
filterActive?: boolean
): SilentMethod | undefined;
declare const updateStateEffect: typeof updateState;
declare const silentQueueMap: SilentQueueMap;
/**
* 验证码发送场景的请求hook
* @param handler method实例或获取函数
* @param 配置参数
* @return useCaptcha相关数据和操作函数
*/
declare function useCaptcha<S, E, R, T, RC, RE, RH, ARG extends any[]>(
handler: Method<S, E, R, T, RC, RE, RH> | AlovaMethodHandler<S, E, R, T, RC, RE, RH, ARG>,
config?: CaptchaHookConfig<S, E, R, T, RC, RE, RH, ARG>
): CaptchaReturnType<S, E, R, T, RC, RE, RH, ARG>;
/**
* useForm
* 表单的提交hook,具有草稿功能,以及多页表单的数据同步功能
*
* 适用场景:
* 1. 单表单/多表单提交、草稿数据持久化、数据更新和重置
* 2. 条件搜索输入项,可持久化搜索条件,可立即发送表单数据
*
* @param handler method获取函数,只需要获取同步数据时可传id
* @param config 配置参数
* @return useForm相关数据和操作函数
*/
declare function useForm<F = any, S = any, E = any, R = any, T = any, RC = any, RE = any, RH = any>(
handler: FormHookHandler<S, E, R, T, RC, RE, RH, F> | NonNullable<FormHookConfig<S, E, R, T, RC, RE, RH, F>['id']>,
config?: FormHookConfig<S, E, R, T, RC, RE, RH, F>
): FormReturnType<S, E, R, T, RC, RE, RH, F>;
/**
* useSSE
* 使用 Server-sent events 发送请求
*
*
* @param handler method获取函数
* @param config 配置参数
* @return useSSE相关数据和操作函数
*/
declare function useSSE<Data = any, S = any, E = any, R = any, T = any, RC = any, RE = any, RH = any>(
handler: Method<S, E, R, T, RC, RE, RH> | AlovaMethodHandler<S, E, R, T, RC, RE, RH>,
config?: SSEHookConfig
): SSEReturnType<S, Data, E, R, T, RC, RE, RH>;
/**
* useRetriableRequest
* 具有重试功能的请求hook
* 适用场景:
* 1. 请求失败重试、或自定义规则重试
* 2. 手动停止/启动重试
*
* @param handler method实例或获取函数
* @param config 配置参数
* @return useRetriableRequest相关数据和操作函数
*/
declare function useRetriableRequest<S, E, R, T, RC, RE, RH, ARG extends any[]>(
handler: Method<S, E, R, T, RC, RE, RH> | AlovaMethodHandler<S, E, R, T, RC, RE, RH, ARG>,
config?: RetriableHookConfig<S, E, R, T, RC, RE, RH, ARG>
): RetriableReturnType<S, E, R, T, RC, RE, RH, ARG>;
/**
* useSerialRequest
* 串行请求hook,handlers中将接收上一个请求的结果
* 适用场景:串行请求一组接口
* @param serialHandlers 串行请求回调数组
* @param config 配置参数
* @return useSerialRequest相关数据和操作函数
*/
declare function useSerialRequest<S, E, R, T, RC, RE, RH, ARG extends any[], R2>(
serialHandlers: [
Method<S, E, R, T, RC, RE, RH> | AlovaMethodHandler<S, E, R, T, RC, RE, RH, ARG>,
(value: R, ...args: [...ARG, ...any]) => Method<S, E, R2, T, RC, RE, RH>
],
config?: RequestHookConfig<S, E, R, T, RC, RE, RH, ARG>
): UseHookReturnType<S, E, R2, T, RC, RE, RH, ARG>;
/**
* useSerialRequest(重载)
* 串行请求hook,handlers中将接收上一个请求的结果
* 适用场景:串行请求一组接口
* @param serialHandlers 串行请求回调数组
* @param config 配置参数
* @return useSerialRequest相关数据和操作函数
*/
declare function useSerialRequest<S, E, R, T, RC, RE, RH, ARG extends any[], R2, R3>(
serialHandlers: [
Method<S, E, R, T, RC, RE, RH> | AlovaMethodHandler<S, E, R, T, RC, RE, RH, ARG>,
(value: R, ...args: [...ARG, ...any]) => Method<S, E, R2, T, RC, RE, RH>,
(value: R2, ...args: [...ARG, ...any]) => Method<S, E, R3, T, RC, RE, RH>
],
config?: RequestHookConfig<S, E, R, T, RC, RE, RH, ARG>
): UseHookReturnType<S, E, R3, T, RC, RE, RH, ARG>;
/**
* useSerialRequest(重载)
* 串行请求hook,handlers中将接收上一个请求的结果
* 适用场景:串行请求一组接口
* @param serialHandlers 串行请求回调数组
* @param config 配置参数
* @return useSerialRequest相关数据和操作函数
*/
declare function useSerialRequest<S, E, R, T, RC, RE, RH, ARG extends any[], R2, R3, R4>(
serialHandlers: [
Method<S, E, R, T, RC, RE, RH> | AlovaMethodHandler<S, E, R, T, RC, RE, RH, ARG>,
(value: R, ...args: [...ARG, ...any]) => Method<S, E, R2, T, RC, RE, RH>,
(value: R2, ...args: [...ARG, ...any]) => Method<S, E, R3, T, RC, RE, RH>,
(value: R3, ...args: [...ARG, ...any]) => Method<S, E, R4, T, RC, RE, RH>
],
config?: RequestHookConfig<S, E, R, T, RC, RE, RH, ARG>
): UseHookReturnType<S, E, R4, T, RC, RE, RH, ARG>;
/**
* useSerialRequest(重载)
* 串行请求hook,handlers中将接收上一个请求的结果
* 适用场景:串行请求一组接口
* @param serialHandlers 串行请求回调数组
* @param config 配置参数
* @return useSerialRequest相关数据和操作函数
*/
declare function useSerialRequest<S, E, R, T, RC, RE, RH, ARG extends any[], R2, R3, R4, R5>(
serialHandlers: [
Method<S, E, R, T, RC, RE, RH> | AlovaMethodHandler<S, E, R, T, RC, RE, RH, ARG>,
(value: R, ...args: [...ARG, ...any]) => Method<S, E, R2, T, RC, RE, RH>,
(value: R2, ...args: [...ARG, ...any]) => Method<S, E, R3, T, RC, RE, RH>,
(value: R3, ...args: [...ARG, ...any]) => Method<S, E, R4, T, RC, RE, RH>,
(value: R4, ...args: [...ARG, ...any]) => Method<S, E, R5, T, RC, RE, RH>
],
config?: RequestHookConfig<S, E, R, T, RC, RE, RH, ARG>
): UseHookReturnType<S, E, R5, T, RC, RE, RH, ARG>;
/**
* useSerialRequest(重载)
* 串行请求hook,handlers中将接收上一个请求的结果
* 适用场景:串行请求一组接口
* @param serialHandlers 串行请求回调数组
* @param config 配置参数
* @return useSerialRequest相关数据和操作函数
*/
declare function useSerialRequest<S, E, R, T, RC, RE, RH, ARG extends any[], R2, R3, R4, R5, R6>(
serialHandlers: [
Method<S, E, R, T, RC, RE, RH> | AlovaMethodHandler<S, E, R, T, RC, RE, RH, ARG>,
(value: R, ...args: [...ARG, ...any]) => Method<S, E, R2, T, RC, RE, RH>,
(value: R2, ...args: [...ARG, ...any]) => Method<S, E, R3, T, RC, RE, RH>,
(value: R3, ...args: [...ARG, ...any]) => Method<S, E, R4, T, RC, RE, RH>,
(value: R4, ...args: [...ARG, ...any]) => Method<S, E, R5, T, RC, RE, RH>,
(value: R5, ...args: [...ARG, ...any]) => Method<S, E, R6, T, RC, RE, RH>
],
config?: RequestHookConfig<S, E, R, T, RC, RE, RH, ARG>
): UseHookReturnType<S, E, R6, T, RC, RE, RH, ARG>;
/**
* useSerialRequest(重载)
* 串行请求hook,handlers中将接收上一个请求的结果
* 适用场景:串行请求一组接口
* @param serialHandlers 串行请求回调数组
* @param config 配置参数
* @return useSerialRequest相关数据和操作函数
*/
declare function useSerialRequest<S, E, R, T, RC, RE, RH, ARG extends any[], R2, R3, R4, R5, R6, R7>(
serialHandlers: [
Method<S, E, R, T, RC, RE, RH> | AlovaMethodHandler<S, E, R, T, RC, RE, RH, ARG>,
(value: R, ...args: [...ARG, ...any]) => Method<S, E, R2, T, RC, RE, RH>,
(value: R2, ...args: [...ARG, ...any]) => Method<S, E, R3, T, RC, RE, RH>,
(value: R3, ...args: [...ARG, ...any]) => Method<S, E, R4, T, RC, RE, RH>,
(value: R4, ...args: [...ARG, ...any]) => Method<S, E, R5, T, RC, RE, RH>,
(value: R5, ...args: [...ARG, ...any]) => Method<S, E, R6, T, RC, RE, RH>,
(value: R6, ...args: [...ARG, ...any]) => Method<S, E, R7, T, RC, RE, RH>
],
config?: RequestHookConfig<S, E, R, T, RC, RE, RH, ARG>
): UseHookReturnType<S, E, R7, T, RC, RE, RH>;
/**
* useSerialRequest(重载)
* 串行请求hook,handlers中将接收上一个请求的结果
* 适用场景:串行请求一组接口
* @param serialHandlers 串行请求回调数组
* @param config 配置参数
* @return useSerialRequest相关数据和操作函数
*/
declare function useSerialRequest<S, E, R, T, RC, RE, RH, ARG extends any[], R2, R3, R4, R5, R6, R7, R8>(
serialHandlers: [
Method<S, E, R, T, RC, RE, RH> | AlovaMethodHandler<S, E, R, T, RC, RE, RH, ARG>,
(value: R, ...args: [...ARG, ...any]) => Method<S, E, R2, T, RC, RE, RH>,
(value: R2, ...args: [...ARG, ...any]) => Method<S, E, R3, T, RC, RE, RH>,
(value: R3, ...args: [...ARG, ...any]) => Method<S, E, R4, T, RC, RE, RH>,
(value: R4, ...args: [...ARG, ...any]) => Method<S, E, R5, T, RC, RE, RH>,
(value: R5, ...args: [...ARG, ...any]) => Method<S, E, R6, T, RC, RE, RH>,
(value: R6, ...args: [...ARG, ...any]) => Method<S, E, R7, T, RC, RE, RH>,
(value: R7, ...args: [...ARG, ...any]) => Method<S, E, R8, T, RC, RE, RH>
],
config?: RequestHookConfig<S, E, R, T, RC, RE, RH, ARG>
): UseHookReturnType<S, E, R8, T, RC, RE, RH, ARG>;
/**
* useSerialWatcher
* 串行请求hook,handlers中将接收上一个请求的结果
* 适用场景:监听状态变化后,串行请求一组接口
* @param serialHandlers 串行请求回调数组
* @param config 配置参数
* @return useSerialWatcher相关数据和操作函数
*/
declare function useSerialWatcher<S, E, R, T, RC, RE, RH, ARG extends any[], R2>(
serialHandlers: [
Method<S, E, R, T, RC, RE, RH> | AlovaMethodHandler<S, E, R, T, RC, RE, RH, ARG>,
(value: R, ...args: [...ARG, ...any]) => Method<S, E, R2, T, RC, RE, RH>
],
watchingStates: any[],
config?: WatcherHookConfig<S, E, R, T, RC, RE, RH, ARG>
): UseHookReturnType<S, E, R2, T, RC, RE, RH, ARG>;
/**
* useSerialWatcher(重载)
* 串行请求hook,handlers中将接收上一个请求的结果
* 适用场景:监听状态变化后,串行请求一组接口
* @param serialHandlers 串行请求回调数组
* @param config 配置参数
* @return useSerialWatcher相关数据和操作函数
*/
declare function useSerialWatcher<S, E, R, T, RC, RE, RH, ARG extends any[], R2, R3>(
serialHandlers: [
Method<S, E, R, T, RC, RE, RH> | AlovaMethodHandler<S, E, R, T, RC, RE, RH, ARG>,
(value: R, ...args: [...ARG, ...any]) => Method<S, E, R2, T, RC, RE, RH>,
(value: R2, ...args: [...ARG, ...any]) => Method<S, E, R3, T, RC, RE, RH>
],
watchingStates: any[],
config?: WatcherHookConfig<S, E, R, T, RC, RE, RH, ARG>
): UseHookReturnType<S, E, R3, T, RC, RE, RH, ARG>;
/**
* useSerialWatcher(重载)
* 串行请求hook,handlers中将接收上一个请求的结果
* 适用场景:监听状态变化后,串行请求一组接口
* @param serialHandlers 串行请求回调数组
* @param config 配置参数
* @return useSerialWatcher相关数据和操作函数
*/
declare function useSerialWatcher<S, E, R, T, RC, RE, RH, ARG extends any[], R2, R3, R4>(
serialHandlers: [
Method<S, E, R, T, RC, RE, RH> | AlovaMethodHandler<S, E, R, T, RC, RE, RH, ARG>,
(value: R, ...args: [...ARG, ...any]) => Method<S, E, R2, T, RC, RE, RH>,
(value: R2, ...args: [...ARG, ...any]) => Method<S, E, R3, T, RC, RE, RH>,
(value: R3, ...args: [...ARG, ...any]) => Method<S, E, R4, T, RC, RE, RH>
],
watchingStates: any[],
config?: WatcherHookConfig<S, E, R, T, RC, RE, RH, ARG>
): UseHookReturnType<S, E, R4, T, RC, RE, RH, ARG>;
/**
* useSerialWatcher(重载)
* 串行请求hook,handlers中将接收上一个请求的结果
* 适用场景:监听状态变化后,串行请求一组接口
* @param serialHandlers 串行请求回调数组
* @param config 配置参数
* @return useSerialWatcher相关数据和操作函数
*/
declare function useSerialWatcher<S, E, R, T, RC, RE, RH, ARG extends any[], R2, R3, R4, R5>(
serialHandlers: [
Method<S, E, R, T, RC, RE, RH> | AlovaMethodHandler<S, E, R, T, RC, RE, RH, ARG>,
(value: R, ...args: [...ARG, ...any]) => Method<S, E, R2, T, RC, RE, RH>,
(value: R2, ...args: [...ARG, ...any]) => Method<S, E, R3, T, RC, RE, RH>,
(value: R3, ...args: [...ARG, ...any]) => Method<S, E, R4, T, RC, RE, RH>,
(value: R4, ...args: [...ARG, ...any]) => Method<S, E, R5, T, RC, RE, RH>
],
watchingStates: any[],
config?: WatcherHookConfig<S, E, R, T, RC, RE, RH, ARG>
): UseHookReturnType<S, E, R5, T, RC, RE, RH, ARG>;
/**
* useSerialWatcher(重载)
* 串行请求hook,handlers中将接收上一个请求的结果
* 适用场景:监听状态变化后,串行请求一组接口
* @param serialHandlers 串行请求回调数组
* @param config 配置参数
* @return useSerialWatcher相关数据和操作函数
*/
declare function useSerialWatcher<S, E, R, T, RC, RE, RH, ARG extends any[], R2, R3, R4, R5, R6>(
serialHandlers: [
Method<S, E, R, T, RC, RE, RH> | AlovaMethodHandler<S, E, R, T, RC, RE, RH, ARG>,
(value: R, ...args: [...ARG, ...any]) => Method<S, E, R2, T, RC, RE, RH>,
(value: R2, ...args: [...ARG, ...any]) => Method<S, E, R3, T, RC, RE, RH>,
(value: R3, ...args: [...ARG, ...any]) => Method<S, E, R4, T, RC, RE, RH>,
(value: R4, ...args: [...ARG, ...any]) => Method<S, E, R5, T, RC, RE, RH>,
(value: R5, ...args: [...ARG, ...any]) => Method<S, E, R6, T, RC, RE, RH>
],
watchingStates: any[],
config?: WatcherHookConfig<S, E, R, T, RC, RE, RH, ARG>
): UseHookReturnType<S, E, R6, T, RC, RE, RH, ARG>;
/**
* useSerialWatcher(重载)
* 串行请求hook,handlers中将接收上一个请求的结果
* 适用场景:监听状态变化后,串行请求一组接口
* @param serialHandlers 串行请求回调数组
* @param config 配置参数
* @return useSerialWatcher相关数据和操作函数
*/
declare function useSerialWatcher<S, E, R, T, RC, RE, RH, ARG extends any[], R2, R3, R4, R5, R6, R7>(
serialHandlers: [
Method<S, E, R, T, RC, RE, RH> | AlovaMethodHandler<S, E, R, T, RC, RE, RH, ARG>,
(value: R, ...args: [...ARG, ...any]) => Method<S, E, R2, T, RC, RE, RH>,
(value: R2, ...args: [...ARG, ...any]) => Method<S, E, R3, T, RC, RE, RH>,
(value: R3, ...args: [...ARG, ...any]) => Method<S, E, R4, T, RC, RE, RH>,
(value: R4, ...args: [...ARG, ...any]) => Method<S, E, R5, T, RC, RE, RH>,
(value: R5, ...args: [...ARG, ...any]) => Method<S, E, R6, T, RC, RE, RH>,
(value: R6, ...args: [...ARG, ...any]) => Method<S, E, R7, T, RC, RE, RH>
],
watchingStates: any[],
config?: WatcherHookConfig<S, E, R, T, RC, RE, RH, ARG>
): UseHookReturnType<S, E, R7, T, RC, RE, RH, ARG>;
/**
* useSerialWatcher(重载)
* 串行请求hook,handlers中将接收上一个请求的结果
* 适用场景:监听状态变化后,串行请求一组接口
* @param serialHandlers 串行请求回调数组
* @param config 配置参数
* @return useSerialWatcher相关数据和操作函数
*/
declare function useSerialWatcher<S, E, R, T, RC, RE, RH, ARG extends any[], R2, R3, R4, R5, R6, R7, R8>(
serialHandlers: [
Method<S, E, R, T, RC, RE, RH> | AlovaMethodHandler<S, E, R, T, RC, RE, RH, ARG>,
(value: R, ...args: [...ARG, ...any]) => Method<S, E, R2, T, RC, RE, RH>,
(value: R2, ...args: [...ARG, ...any]) => Method<S, E, R3, T, RC, RE, RH>,
(value: R3, ...args: [...ARG, ...any]) => Method<S, E, R4, T, RC, RE, RH>,
(value: R4, ...args: [...ARG, ...any]) => Method<S, E, R5, T, RC, RE, RH>,
(value: R5, ...args: [...ARG, ...any]) => Method<S, E, R6, T, RC, RE, RH>,
(value: R6, ...args: [...ARG, ...any]) => Method<S, E, R7, T, RC, RE, RH>,
(value: R7, ...args: [...ARG, ...any]) => Method<S, E, R8, T, RC, RE, RH>
],
watchingStates: any[],
config?: WatcherHookConfig<S, E, R, T, RC, RE, RH, ARG>
): UseHookReturnType<S, E, R8, T, RC, RE, RH, ARG>;
/**
* 操作函数委托中间件
* 使用此中间件后可通过accessAction调用委托的函数
* 可以委托多个相同id
* 以此来消除组件的层级限制
* @param id 委托者id
* @returns alova中间件函数
*/
declare const actionDelegationMiddleware: ActionDelegationMiddleware;
/**
* 访问操作函数,如果匹配多个则会以此调用onMatch
* @param id 委托者id,或正则表达式
* @param onMatch 匹配的订阅者
*/
declare const accessAction: AccessAction;
/**
* 创建客户端的token认证拦截器
* @example
* ```js
* const { onAuthRequired, onResponseRefreshToken } = createClientTokenAuthentication(\/* ... *\/);
* const alova = createAlova({
* // ...
* beforeRequest: onAuthRequired(method => {
* // ...
* }),
* responded: onResponseRefreshToken({
* onSuccess(response, method) {
* // ...
* },
* onError(error, method) {
* // ...
* },
* })
* });
* ```
* @param options 配置参数
* @returns token认证拦截器函数
*/
declare function createClientTokenAuthentication<
SH extends StatesHook<any, any>,
RA extends
| AlovaRequestAdapter<any, any, any, any, any>
| ((...args: any[]) => AlovaRequestAdapter<any, any, any, any, any>) = typeof GlobalFetch
>(
options: ClientTokenAuthenticationOptions<AlovaRequestAdapterUnified<RA>>
): TokenAuthenticationResult<SH, AlovaRequestAdapterUnified<RA>>;
/**
* 创建服务端的token认证拦截器
* @example
* ```js
* const { onAuthRequired, onResponseRefreshToken } = createServerTokenAuthentication(\/* ... *\/);
* const alova = createAlova({
* // ...
* beforeRequest: onAuthRequired(method => {
* // ...
* }),
* responded: onResponseRefreshToken({
* onSuccess(response, method) {
* // ...
* },
* onError(error, method) {
* // ...
* },
* })
* });
* ```
* @param options 配置参数
* @returns token认证拦截器函数
*/
declare function createServerTokenAuthentication<
SH extends StatesHook<any, any>,
RA extends
| AlovaRequestAdapter<any, any, any, any, any>
| ((...args: any[]) => AlovaRequestAdapter<any, any, any, any, any>) = typeof GlobalFetch
>(
options: ServerTokenAuthenticationOptions<AlovaRequestAdapterUnified<RA>>
): TokenAuthenticationResult<SH, AlovaRequestAdapterUnified<RA>>;
/**
* 在一定条件下可以自动重新拉取数据,从而刷新页面,使用场景有:
* 1. 浏览器 tab 切换时拉取最新数据
* 2. 浏览器聚焦时拉取最新数据
* 3. 网络重连时拉取最新数据
* 4. 轮询请求
* 可同时配置以上的一个或多个触发条件,也可以配置节流时间来防止短时间内触发多次请求,例如 1 秒内只允许触发一次。
* @param handler method实例或获取函数
* @param config 配置参数
* @return useAutoRequest相关数据和操作函数
*/
declare function useAutoRequest<S, E, R, T, RC, RE, RH, ARG extends any[]>(
handler: Method<S, E, R, T, RC, RE, RH> | AlovaMethodHandler<S, E, R, T, RC, RE, RH, ARG>,
config?: AutoRequestHookConfig<S, E, R, T, RC, RE, RH, ARG>
): UseHookReturnType<S, E, R, T, RC, RE, RH, ARG>;
declare namespace useAutoRequest {
function onNetwork(
notify: NotifyHandler,
config: AutoRequestHookConfig<any, any, any, any, any, any, any, any>
): UnbindHandler;
function onPolling(
notify: NotifyHandler,
config: AutoRequestHookConfig<any, any, any, any, any, any, any, any>
): UnbindHandler;
function onVisibility(
notify: NotifyHandler,
config: AutoRequestHookConfig<any, any, any, any, any, any, any, any>
): UnbindHandler;
function onFocus(
notify: NotifyHandler,
config: AutoRequestHookConfig<any, any, any, any, any, any, any, any>
): UnbindHandler;
}