Как получить доступ к текущему состоянию в useCallback

Есть функциональный компонент, в котором хук эффекта вызывается только один раз при монтировании и один раз при размонтировании.

    const [latest, setLatest] = useState([])

    const dataHandler = (e: CustomEvent) => {
        // latest всё ещё [] даже если он был изменён
    }

    useEffect(() => {
        document.body.classList.add('dashboard')

        document.addEventListener('WebSocketStringMessage', wsDataHandler as EventListener)

        return (): void => {
            document.body.classList.remove('dashboard')
            document.removeEventListener('WebSocketStringMessage', wsDataHandler as EventListener)
        }
    }, [])

Но так же в теле устанавливается подписка на событие получения сообщения от вебсокета. Проблема в том, что при вызове обработчика wsDataHandler внутрь его передаётся скоуп хука эффекта, из-за чего переменная состояния latest всегда будет иметь значение пустого массива. Как это исправить?


Ответы (0 шт):