Files
eveship.fit.react/src/Helpers/LocalStorage.tsx
Patric Stout 44137e0235 feat: loading fits from a Browser's LocalStorage (#43)
You cannot save yet; but when you can, it loads fine.
2023-12-22 12:31:51 +00:00

28 lines
857 B
TypeScript

import React from "react";
export const useLocalStorage = function <T>(key: string, initialValue: T) {
const [storedValue, setStoredValue] = React.useState<T>(() => {
if (typeof window === 'undefined') return initialValue;
const item = window.localStorage.getItem(key);
return item ? JSON.parse(item) : initialValue;
});
const setValue = React.useCallback((value: T | ((val: T) => T)) => {
if (typeof window === 'undefined') return;
if (storedValue == value) return;
const valueToStore = value instanceof Function ? value(storedValue) : value;
setStoredValue(valueToStore);
if (valueToStore === undefined) {
window.localStorage.removeItem(key);
return;
}
window.localStorage.setItem(key, JSON.stringify(valueToStore));
}, [key, storedValue]);
return [ storedValue, setValue ] as const;
}