@bemedev/app-react
Version:
Use app-ts inside react
24 lines (20 loc) • 940 B
JavaScript
;
var useSyncExternalStoreWithSelector = require('@bemedev/react-sync');
var types = require('@bemedev/types');
var dequal = require('dequal');
var react = require('react');
var utils_getSnapshot = require('./utils/getSnapshot.cjs');
const useSelector = (service, selector, compare = dequal.dequal) => {
const initialStateCacheRef = react.useRef(types.t.any(undefined));
const subscribe = react.useCallback((listerner) => {
const unsubscribe = service.subscribe(listerner);
return unsubscribe;
}, [service]);
const boundGetSnapshot = react.useCallback(() => {
return utils_getSnapshot.getSnapshot(service, initialStateCacheRef);
}, [service]);
const selectedSnapshot = useSyncExternalStoreWithSelector(subscribe, boundGetSnapshot, boundGetSnapshot, selector, compare);
return selectedSnapshot;
};
exports.useSelector = useSelector;
//# sourceMappingURL=useSelector.cjs.map