@bemedev/app-react
Version:
Use app-ts inside react
22 lines (19 loc) • 868 B
JavaScript
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