UNPKG

react-tangle

Version:

A Simple State Management Library in React

28 lines (27 loc) 1.09 kB
"use strict"; 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;