From 5d1e0a3599c46c1a51b5dbe420ea08251dda532d Mon Sep 17 00:00:00 2001 From: clean99 Date: Mon, 20 Nov 2023 12:39:58 +0800 Subject: [PATCH] feat: add use persisted state hook --- frontend/src/hooks/usePersistedState.ts | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 frontend/src/hooks/usePersistedState.ts diff --git a/frontend/src/hooks/usePersistedState.ts b/frontend/src/hooks/usePersistedState.ts new file mode 100644 index 0000000..1524ad7 --- /dev/null +++ b/frontend/src/hooks/usePersistedState.ts @@ -0,0 +1,19 @@ +import { Dispatch, SetStateAction, useEffect, useState } from 'react'; + +type PersistedState = [T, Dispatch>]; + +function usePersistedState(defaultValue: T, key: string): PersistedState { + const [value, setValue] = useState(() => { + const value = window.localStorage.getItem(key); + + return value ? (JSON.parse(value) as T) : defaultValue; + }); + + useEffect(() => { + window.localStorage.setItem(key, JSON.stringify(value)); + }, [key, value]); + + return [value, setValue]; +} + +export { usePersistedState };