diff --git a/src/utils/usePersistedState.ts b/src/utils/usePersistedState.ts new file mode 100644 index 00000000..3f591795 --- /dev/null +++ b/src/utils/usePersistedState.ts @@ -0,0 +1,23 @@ +import { useState, useEffect, Dispatch, SetStateAction } from 'react'; + +type Response = [T, Dispatch>]; + +function usePeristedState(key: string, initialState: T): Response { + const [state, setState] = useState(() => { + const storageValue = localStorage.getItem(key); + + if (storageValue) { + return JSON.parse(storageValue); + } else { + return initialState; + } + }); + + useEffect(() => { + localStorage.setItem(key, JSON.stringify(state)); + }, [key, state]); + + return [state, setState]; +} + +export default usePeristedState;