diff --git a/packages/nextjs/hooks/common/useLocalStorage.ts b/packages/nextjs/hooks/common/useLocalStorage.ts index 64c5b0a..e8b197a 100644 --- a/packages/nextjs/hooks/common/useLocalStorage.ts +++ b/packages/nextjs/hooks/common/useLocalStorage.ts @@ -3,14 +3,27 @@ import { useEffect, useState } from "react"; export const useLocalStorage = (key: string, defaultValue: T) => { - const [state, setState] = useState(() => { - const savedValue = window.localStorage.getItem(key); - return savedValue ? JSON.parse(savedValue) : defaultValue; - }); + const [state, setState] = useState(defaultValue); + const [hasMounted, setHasMounted] = useState(false); useEffect(() => { - window.localStorage.setItem(key, JSON.stringify(state)); - }, [key, state]); + setHasMounted(true); + }, []); + + useEffect(() => { + if (hasMounted) { + const savedValue = window.localStorage.getItem(key); + if (savedValue) { + setState(JSON.parse(savedValue)); + } + } + }, [hasMounted, key]); + + useEffect(() => { + if (hasMounted) { + window.localStorage.setItem(key, JSON.stringify(state)); + } + }, [key, state, hasMounted]); return [state, setState] as const; };