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 ]; }