@rooks/use-sessionstorage-state
Version:
useState but syncs with sessionstorage
3 lines (2 loc) • 1.1 kB
JavaScript
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t(require("react")):"function"==typeof define&&define.amd?define(["react"],t):(e="undefined"!=typeof globalThis?globalThis:e||self).useSessionstorageState=t(e.React)}(this,(function(e){"use strict";function t(e,t){const n=function(e){if("undefined"==typeof sessionStorage)return null;const t=sessionStorage.getItem(e)||"null";try{return JSON.parse(t)}catch(e){console.error(e)}return t}(e);return null===n?t:n}return function(n,o){const[s,r]=e.useState((()=>t(n,o))),u=e.useRef(!1);e.useEffect((()=>{u.current||function(e,t){"undefined"==typeof sessionStorage||sessionStorage.setItem(e,JSON.stringify(t))}(n,s)}),[s]);const i=e.useCallback((e=>{if(e.storageArea===sessionStorage&&e.key===n)try{u.current=!0;const t=JSON.parse(e.newValue||"null");s!==t&&r(t)}catch(e){console.log(e)}}),[]);return e.useEffect((()=>(window.addEventListener("storage",i),()=>{window.removeEventListener("storage",i)})),[]),[s,function(e){u.current=!1,r(e)},function(){sessionStorage.removeItem(n)}]}}));
//# sourceMappingURL=index.min.js.map