use-sharable-state
Version:
This packages makes sharing states simpler
3 lines (2 loc) • 1.04 kB
JavaScript
var e,t=require("react"),r=(e={},function(t){var r,n=t.stateKey,a=t.setterKey,s=t.setter,u=t.initialValue;e[n]?e[n].setters[a]=s:e[n]={value:u,setters:(r={},r[a]=s,r)}}),n=function(t){var r;return null==(r=e[t])?void 0:r.value};exports.useSharableState=function(a,s){var u=t.useRef((Date.now().toString(36)+Math.random().toString(36)).replace(/\./g,"")),i=t.useMemo(function(){return n(a)||s},[s,a]),l=t.useState(i),o=l[0],c=l[1];return t.useEffect(function(){var t,n,s=u.current;return(null==(n=e[(t={stateKey:a,setterKey:u.current}).stateKey])?void 0:n.setters[t.setterKey])||r({stateKey:a,initialValue:i,setter:c,setterKey:s}),function(){return function(t){var r,n=t.stateKey,a=t.setterKey;null!=(r=e[n])&&r.setters[a]&&delete e[n].setters[a]}({stateKey:a,setterKey:s})}},[i,a]),[o,t.useCallback(function(t){!function(t){var r=t.value,n=e[t.stateKey];n&&(n.value=r,Object.entries(n.setters).forEach(function(e){(0,e[1])(r)}))}("function"==typeof t?{stateKey:a,value:t(n(a))}:{stateKey:a,value:t})},[a])]};
//# sourceMappingURL=index.cjs.map