@historydev
Острая аллергия на анимешников

Как обновлять состояние чтобы избежать рекурсии?

Здравствуйте. Столкнулся с ошибкой violation 200+, решил исправить debounce - его нужно коллить один раз, я так и делаю, однако получаю ошибку что нельзя получить id у undefined. id я пытаюсь получить у prevMessages и messages - они являются состояниями:

const debounce = (func, wait) => {
        let timeout;
        return (() => {
            if (timeout) {
                clearTimeout(timeout);
            }
            timeout = setTimeout(() => func(), wait)
        })()
    }

    const changeHandler = (e) => {
        if(e.target.scrollTop < 1) {
            const msgID = prevMessages.length ? parseInt(prevMessages[0].id) : parseInt(messages[0].id); // prevMessages and messages = useState([])
            console.log(msgID);
            socket.emit('getPrevMessages', {roomId, msgID});
            e.target.scrollTo(0, e.target.querySelector('.direct-chat-msg:nth-child(20)').offsetTop);
            //e.stopPropagation();
        }
    }
    const debouncedChangeHandler = useCallback((e) => debounce(() => changeHandler(e), 250), []); // Если попробовать [prevMessages, messages] - получаю рекурсию и зависание страницы


Скажите пожалуйста как правильно это реализовать? Обработчик вешаю на scroll блока.

Спасибо.
  • Вопрос задан
  • 204 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы