import { Dispatch, SetStateAction, useEffect, useRef, useState } from "react"; export default function useLocalStorage( key: string, defaultValue: T ): [T, Dispatch>] { const isMounted = useRef(false) const [value, setValue] = useState(defaultValue) useEffect(() => { const item = window.localStorage.getItem(key) if (item) { setValue(JSON.parse(item)) } return () => { isMounted.current = false } }, [key]) useEffect(() => { if (isMounted.current) { window.localStorage.setItem(key, JSON.stringify(value)) } else { isMounted.current = true } }, [key, value]) return [value, setValue] }