UNPKG

zmp-react

Version:

Build full featured iOS & Android apps using ZMP & React

38 lines (30 loc) 965 B
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; };