zmp-react
Version:
Build full featured iOS & Android apps using ZMP & React
38 lines (30 loc) • 965 B
JavaScript
import { useState, useEffect, useRef } from 'react';
import { zmp } from './zmp';
export var useStore = function useStore() {
var assignedGetters = 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.store;
getter = arguments.length <= 0 ? undefined : arguments[0];
} // eslint-disable-next-line
var obj = store._gettersPlain[getter];
var _useState = 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;
}
useEffect(function () {
return function () {
// eslint-disable-next-line
store.__removeCallback(onUpdated);
};
}, []);
return value;
};