synapse-storage
Version:
Набор инструментов для управления состоянием и апи-запросами
43 lines (42 loc) • 2.41 kB
TypeScript
import type { Endpoint, RequestStatus } from '../../api/types/endpoint.interface';
import type { QueryOptions } from '../../api/types/query.interface';
export interface UseApiQueryOptions extends QueryOptions {
/** Если `false` — запрос не выполняется (lazy). По умолчанию `true`. */
enabled?: boolean;
/**
* Авто-рефетч активного запроса при инвалидации кэша по тегам эндпоинта
* (после мутаций соседних эндпоинтов с `invalidatesTags`). По умолчанию `true`.
*/
refetchOnInvalidate?: boolean;
}
export interface UseApiQueryResult<TData> {
/** Данные ответа (или из кэша) */
data: TData | undefined;
/** Ошибка запроса */
error: Error | undefined;
/** Текущий статус запроса */
status: RequestStatus;
/** Идёт загрузка */
isLoading: boolean;
/** Запрос завершился ошибкой */
isError: boolean;
/** Запрос завершился успехом */
isSuccess: boolean;
/** Данные пришли из кэша (а не из сети) */
fromCache: boolean;
/** Принудительно перезапросить (минуя кэш-«свежесть» через новый request) */
refetch: () => void;
}
/**
* Хук для выполнения GET-запросов через эндпоинт ApiClient в стиле React Query.
*
* Тонкая обёртка над `endpoint.request(params).subscribe(...)`: дедупликация,
* кэш по тегам, отмена и retry уже реализованы в самом эндпоинте. Хук добавляет
* React-слой: подписку, стабильный ключ параметров, `enabled`/`refetch`,
* SSR-fast-path (синхронное чтение кэша на первом рендере без вспышки loading)
* и авто-рефетч при инвалидации кэша.
*
* @example
* const { data, isLoading, error, refetch } = useApiQuery(endpoints.getUser, { id })
*/
export declare function useApiQuery<TParams extends Record<string, any>, TData>(endpoint: Endpoint<TParams, TData>, params: TParams, options?: UseApiQueryOptions): UseApiQueryResult<TData>;