synapse-storage
Version:
Набор инструментов для управления состоянием и апи-запросами
28 lines (27 loc) • 1.58 kB
TypeScript
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;