| | import { useState, useEffect, useCallback } from 'react'; |
| |
|
| | |
| |
|
| | export function useLocalStorage(key, defaultValue) { |
| | |
| | const readValue = () => { |
| | if (typeof window === 'undefined') return defaultValue; |
| |
|
| | try { |
| | const item = localStorage.getItem(key); |
| | return item ? JSON.parse(item) : defaultValue; |
| | } catch (err) { |
| | console.warn(`Error reading localStorage key “${key}”:`, err); |
| | return defaultValue; |
| | } |
| | }; |
| |
|
| | const [state, setState] = useState(readValue); |
| |
|
| | |
| | useEffect(() => { |
| | try { |
| | localStorage.setItem(key, JSON.stringify(state)); |
| | } catch (err) { |
| | console.warn(`Error setting localStorage key “${key}”:`, err); |
| | } |
| | }, [key, state]); |
| |
|
| | |
| | const setField = useCallback((key, value) => { |
| | setState((prev) => ({ |
| | ...prev, |
| | [key]: value |
| | })); |
| | }, []); |
| |
|
| | |
| | const resetState = useCallback(() => { |
| | setState(defaultValue); |
| | localStorage.setItem(key, JSON.stringify(defaultValue)); |
| | }, [defaultValue, key]); |
| |
|
| | return { state, setState, setField, resetState }; |
| | } |
| |
|