'use client' import { type Dispatch, type SetStateAction, useEffect, useState } from 'react' function parse(value: string) { try { return JSON.parse(value) } catch { return value } } export function usePersistentState( key: string, initialState?: T | (() => T) ): [T, Dispatch>] { const [state, setState] = useState(initialState as T) function changeValue(state: SetStateAction) { setState(state) localStorage.setItem(key, JSON.stringify(state)) } useEffect(() => { const stored = localStorage.getItem(key) if (!stored) { setState(initialState as T) localStorage.setItem(key, JSON.stringify(initialState)) } else { setState(parse(stored)) } }, [initialState, key]) return [state, changeValue] }