@raulpesilva/re-state
Version:
easy way to create a shared state to the entire application
27 lines (24 loc) • 853 B
JavaScript
import { useDebugValue, useState } from 'react';
import { shallowEqual } from './utils';
import { store } from './store';
import { useIsomorphicLayoutEffect } from './useIsomorphicLayoutEffect';
export function useReStateSelector(selector, isEquals) {
if (isEquals === void 0) {
isEquals = shallowEqual;
}
var _useState = useState(store.getMany(selector)),
selectorValue = _useState[0],
setSelectorValue = _useState[1];
useDebugValue(selectorValue);
useIsomorphicLayoutEffect(function () {
var unSub = store.subscribeSelector(function (prevStore, newStore) {
var prevSelection = selector(prevStore);
var newSelection = selector(newStore);
if (!isEquals(prevSelection, newSelection)) {
setSelectorValue(newSelection);
}
});
return unSub;
}, [selector]);
return selectorValue;
}