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