zmp-react
Version:
Build full featured iOS & Android apps using ZMP & React
47 lines (34 loc) • 1.08 kB
JavaScript
;
exports.__esModule = true;
exports.useStore = void 0;
var _react = require("react");
var _zmp = require("./zmp");
var useStore = function useStore() {
var assignedGetters = (0, _react.useRef)({}); // (store, getter)
var store = arguments.length <= 0 ? undefined : arguments[0];
var getter = arguments.length <= 1 ? undefined : arguments[1];
if (arguments.length === 1) {
// (getter)
store = _zmp.zmp.store;
getter = arguments.length <= 0 ? undefined : arguments[0];
} // eslint-disable-next-line
var obj = store._gettersPlain[getter];
var _useState = (0, _react.useState)(obj.value),
value = _useState[0],
setValue = _useState[1];
function onUpdated(newValue) {
setValue(newValue);
}
if (!assignedGetters.current[getter]) {
obj.onUpdated(onUpdated);
assignedGetters.current[getter] = true;
}
(0, _react.useEffect)(function () {
return function () {
// eslint-disable-next-line
store.__removeCallback(onUpdated);
};
}, []);
return value;
};
exports.useStore = useStore;