use-form
Version:
36 lines (35 loc) • 1.24 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
exports.__esModule = true;
var nest_deep_1 = require("nest-deep");
var react_1 = require("react");
var isEqual_1 = __importDefault(require("../helpers/isEqual"));
function useSubscription(_a) {
var getState = _a.getState, subscribe = _a.subscribe;
var _b = react_1.useState(getState()), state = _b[0], setState = _b[1];
react_1.useEffect(function () {
var didUnsubscribe = false;
var checkForUpdates = function () {
if (didUnsubscribe) {
return;
}
var nextState = getState();
return setState(function (prevState) {
if (isEqual_1["default"](nest_deep_1.flatten(state), nest_deep_1.flatten(nextState))) {
return prevState;
}
return nextState;
});
};
checkForUpdates();
var unsubscribe = subscribe(checkForUpdates);
return function () {
didUnsubscribe = true;
unsubscribe();
};
}, [subscribe]);
return state;
}
exports["default"] = useSubscription;