import { useEffect, useState } from 'react'; function getStorageValue(key: string, defaultValue: ValueType) { const saved = localStorage.getItem(key); const initial = saved ? JSON.parse(saved) as ValueType : undefined; return initial || defaultValue; } const useLocalStorage = (key: string, defaultValue: ValueType): [ValueType, React.Dispatch>] => { const [value, setValue] = useState(() => { return getStorageValue(key, defaultValue); }); useEffect(() => { if (value === undefined) { localStorage.removeItem(key) } else { localStorage.setItem(key, JSON.stringify(value)); } }, [key, value]); return [value, setValue]; }; export default useLocalStorage;