@alexmarqs/react-use-local-storage
Version:
React hook to persist and sync state with localStorage
3 lines (2 loc) • 1.34 kB
JavaScript
;Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),t="undefined"!=typeof window,r=new Set,n=function(n,o,a){void 0===a&&(a={sync:!1});var i=e.useState((function(){if(!t)return o;try{var e=window.localStorage.getItem(n);return e?JSON.parse(e):o}catch(e){return console.warn("An error occured when trying to READ from local storage key: "+n+". Returning initial value.",e),o}})),s=i[0],c=i[1];e.useEffect((function(){if(r.has(n))throw new Error("Detected multiple instances of useLocalStorage for the same key "+n+". Please consider using global state.");return r.add(n),function(){r.delete(n)}}),[n]);var u=e.useCallback((function(e){if(t)try{var r=e instanceof Function?e(s):e;c(r),window.localStorage.setItem(n,JSON.stringify(r))}catch(e){console.warn("An error occured when trying to WRITE to local storage key: "+n+")",e)}else console.warn("Trying to set a value inside SSR app - not supported.")}),[n,s]);return e.useEffect((function(){if(a.sync){var e=function(e){if(e.key===n&&e.storageArea===window.localStorage){var t=e.newValue?JSON.parse(e.newValue):o;c(t)}};return window.addEventListener("storage",e),function(){window.removeEventListener("storage",e)}}}),[o,n,a.sync]),[s,u]};exports.default=n,exports.useLocalStorage=n;
//# sourceMappingURL=react-use-local-storage.cjs.production.min.js.map