UNPKG

synapse-storage

Version:

Набор инструментов для управления состоянием и апи-запросами

28 lines (27 loc) 1.58 kB
import { IStorageBase } from '../../core'; /** * RxJS-путь «store → реактивно в компоненте» без footgun'а с пере-подпиской. * * Оборачивает {@link toObservable} в `useMemo` по `[storage]` и подписывается * через {@link useObservable}. Без этой обёртки инлайновый `toObservable(storage)` * в рендере создавал бы новый Observable на каждый рендер и провоцировал лишние * пере-подписки. * * Эквивалентно `useStorageSubscribe`, но через RxJS — берите его, если нужны * операторы (`debounceTime`, `scan` и т.п.) поверх потока состояния. * * @example * ```ts * // весь стейт * const state = useStorageObservable(storage) * // срез (эмитит только при изменении среза) * const userId = useStorageObservable(storage, (s) => s.user.id) * ``` * * @template S - Тип состояния хранилища * @template R - Тип возвращаемого среза * @param storage - Экземпляр хранилища * @param selector - Опциональный селектор среза (поток с `distinctUntilChanged`) */ export declare function useStorageObservable<S extends Record<string, any>>(storage: IStorageBase<S>): S; export declare function useStorageObservable<S extends Record<string, any>, R>(storage: IStorageBase<S>, selector: (state: S) => R): R;