usehooks-ts
Version:
React hook library, ready to use, written in Typescript.
52 lines • 1.96 kB
JavaScript
import { useEffect, useState } from 'react';
import { useEventListener } from '../useEventListener';
function useLocalStorage(key, initialValue) {
var readValue = function () {
if (typeof window === 'undefined') {
return initialValue;
}
try {
var item = window.localStorage.getItem(key);
return item ? parseJSON(item) : initialValue;
}
catch (error) {
console.warn("Error reading localStorage key \u201C".concat(key, "\u201D:"), error);
return initialValue;
}
};
var _a = useState(readValue), storedValue = _a[0], setStoredValue = _a[1];
var setValue = function (value) {
if (typeof window == 'undefined') {
console.warn("Tried setting localStorage key \u201C".concat(key, "\u201D even though environment is not a client"));
}
try {
var newValue = value instanceof Function ? value(storedValue) : value;
window.localStorage.setItem(key, JSON.stringify(newValue));
setStoredValue(newValue);
window.dispatchEvent(new Event('local-storage'));
}
catch (error) {
console.warn("Error setting localStorage key \u201C".concat(key, "\u201D:"), error);
}
};
useEffect(function () {
setStoredValue(readValue());
}, []);
var handleStorageChange = function () {
setStoredValue(readValue());
};
useEventListener('storage', handleStorageChange);
useEventListener('local-storage', handleStorageChange);
return [storedValue, setValue];
}
export default useLocalStorage;
function parseJSON(value) {
try {
return value === 'undefined' ? undefined : JSON.parse(value !== null && value !== void 0 ? value : '');
}
catch (error) {
console.log('parsing error on', { value: value });
return undefined;
}
}
//# sourceMappingURL=useLocalStorage.js.map