UNPKG

@bemedev/app-react

Version:
22 lines (19 loc) 868 B
import useSyncExternalStoreWithSelector from '@bemedev/react-sync'; import { t } from '@bemedev/types'; import { dequal } from 'dequal'; import { useRef, useCallback } from 'react'; import { getSnapshot } from './utils/getSnapshot.js'; const useSelector = (service, selector, compare = dequal) => { const initialStateCacheRef = useRef(t.any(undefined)); const subscribe = useCallback((listerner) => { const unsubscribe = service.subscribe(listerner); return unsubscribe; }, [service]); const boundGetSnapshot = useCallback(() => { return getSnapshot(service, initialStateCacheRef); }, [service]); const selectedSnapshot = useSyncExternalStoreWithSelector(subscribe, boundGetSnapshot, boundGetSnapshot, selector, compare); return selectedSnapshot; }; export { useSelector }; //# sourceMappingURL=useSelector.js.map