@raulpesilva/re-state
Version:
easy way to create a shared state to the entire application
41 lines (31 loc) • 1.12 kB
JavaScript
exports.__esModule = true;
exports.useReState = useReState;
var _react = require("react");
var _store = require("./store");
var _useIsomorphicLayoutEffect = require("./useIsomorphicLayoutEffect");
function useReState(key, initialValue) {
var makeState = (0, _react.useCallback)(function (value) {
if (_store.store.has(key)) {
return _store.store.get(key);
} else {
_store.store.setWithoutNotify(key, value);
return _store.store.get(key);
}
}, [key]);
var setState = (0, _react.useCallback)(function (newValue) {
_store.store.set(key, newValue);
}, [key]);
var _useState = (0, _react.useState)(makeState(initialValue)),
reStateValue = _useState[0],
setReStateValue = _useState[1];
(0, _react.useDebugValue)(makeState(initialValue));
(0, _useIsomorphicLayoutEffect.useIsomorphicLayoutEffect)(function () {
var unSub = _store.store.subscribe(key, function () {
setReStateValue(_store.store.get(key));
});
return unSub;
}, [initialValue, key]);
return [reStateValue, setState];
}
useReState.displayName = 'useReState';
;