//noPage import { useCallback, useEffect, useRef, useState } from 'react'; type useSafeStateReturn = [T, (newState: T | ((newState: T) => T)) => void, () => T]; export default function useSafeState(defaultValue?: T): useSafeStateReturn { const isMountedRef = useRef(true); const valueRef = useRef(defaultValue as T); const [, rerender] = useState({}); const updateState = useCallback((value: T | ((prevState: T) => T)) => { if (isMountedRef.current) { if (typeof value === 'function') { valueRef.current = (value as (prevState: T) => T)(valueRef.current); } else { valueRef.current = value; } rerender({}); } }, []); const getter = () => { return valueRef.current; }; useEffect(() => { isMountedRef.current = true; return () => { isMountedRef.current = false; }; }, []); return [valueRef.current, updateState, getter]; }