@raulpesilva/re-state
Version:
easy way to create a shared state to the entire application
37 lines (27 loc) • 995 B
JavaScript
;
exports.__esModule = true;
exports.useReStateSelector = useReStateSelector;
var _react = require("react");
var _utils = require("./utils");
var _store = require("./store");
var _useIsomorphicLayoutEffect = require("./useIsomorphicLayoutEffect");
function useReStateSelector(selector, isEquals) {
if (isEquals === void 0) {
isEquals = _utils.shallowEqual;
}
var _useState = (0, _react.useState)(_store.store.getMany(selector)),
selectorValue = _useState[0],
setSelectorValue = _useState[1];
(0, _react.useDebugValue)(selectorValue);
(0, _useIsomorphicLayoutEffect.useIsomorphicLayoutEffect)(function () {
var unSub = _store.store.subscribeSelector(function (prevStore, newStore) {
var prevSelection = selector(prevStore);
var newSelection = selector(newStore);
if (!isEquals(prevSelection, newSelection)) {
setSelectorValue(newSelection);
}
});
return unSub;
}, [selector]);
return selectorValue;
}