import { useEffect, useState, Dispatch, SetStateAction } from 'react' type Response = [T, Dispatch>] function usePersistedState(key: string, initialState: T): Response { const [state, setState] = useState(() => { const storageValue = localStorage.getItem(key) if (storageValue) { if (typeof initialState === 'string') { return storageValue } else { return JSON.parse(storageValue) } } else { return initialState } }) useEffect(() => { localStorage.setItem(key, JSON.stringify(state)) }, [key, state]) return [state, setState] } export default usePersistedState