import { Dispatch, SetStateAction, useEffect, useState } from 'react'; export function usePersistedState (key: string, defaultValue: S): [S | undefined, Dispatch>] { const [state, setState] = useState( () => { try { const item = localStorage.getItem(key); return JSON.parse(item || (String(defaultValue))); } catch (e) { console.warn('Failed to retrieve persisted value from store.', e); return defaultValue; } } ); useEffect(() => { localStorage.setItem(key, JSON.stringify(state)) }, [key, state]); return [ state, setState ]; }