synapse-storage
Version:
Набор инструментов для управления состоянием и апи-запросами
27 lines (26 loc) • 1.87 kB
TypeScript
import { IStorageBase } from '../../core';
export interface UseStorageSubscribeOptions<R> {
/**
* Функция сравнения предыдущего и нового среза. Если возвращает `true`,
* снапшот не меняется по ссылке и компонент НЕ ререндерится — даже если
* остальное состояние стора изменилось. Полезно, когда селектор возвращает
* объект/массив (новая ссылка на каждый тик) или когда нужно ререндерить
* только при изменении конкретного среза.
*/
equals?: (a: R, b: R) => boolean;
}
/**
* Хук для подписки на изменения в хранилище.
* Использует useSyncExternalStore для корректной работы в Concurrent Mode.
*
* Принимает IStorageBase (общий интерфейс для sync и async хранилищ),
* так как подписки одинаковы для всех типов.
*
* @template S - Тип состояния хранилища
* @template R - Тип возвращаемого значения
* @param storage - Экземпляр хранилища или null (до инициализации)
* @param selector - Функция-селектор для выбора данных
* @param options - Опции: `equals` для мемоизации снапшота (см. {@link UseStorageSubscribeOptions})
* @returns Значение из хранилища
*/
export declare const useStorageSubscribe: <S extends Record<string, any>, R = any>(storage: IStorageBase<S> | null, selector: (state: S) => R, options?: UseStorageSubscribeOptions<R>) => R | undefined;