Как получить доступ к текущему состоянию в 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 всегда будет иметь значение пустого массива. Как это исправить?