react-tangle
Version:
A Simple State Management Library in React
28 lines (27 loc) • 1.09 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
var React = require("react");
var useTangledContext_1 = require("./useTangledContext");
function useTangledState(key, defaultV) {
var tangledContext = useTangledContext_1.useTangledContext();
var _a = React.useState(tangledContext.stateOf(key) || defaultV), localState = _a[0], setLocalState = _a[1];
var cbRef = React.useRef();
React.useEffect(function () {
cbRef.current = function (newV, _oldV, source) {
if (source !== cbRef.current) {
setLocalState(newV);
}
};
return tangledContext.subscribe(key, cbRef.current);
}, []);
var setState = React.useCallback(function (nextV) {
var toSet = nextV;
if (typeof nextV === 'function') {
toSet = nextV(tangledContext.stateOf(key));
}
setLocalState(toSet);
tangledContext.update(key, toSet, cbRef.current);
}, [key, cbRef.current, setLocalState]);
return [localState, setState];
}
exports.useTangledState = useTangledState;