169 похожих чатов

Добрый день. Есть допустим стейт: const [scroll, setScroll] = useState (

false )
На компоненте при его инициализации вешается событие 'scroll'. После при достижении нужной высоты от начала экрана, я обновляю этот стейт на setScroll( true ). Но если повесить консоль.лог на этот обработчик события 'scroll', то мне всё равно выдает старый не измененный стейт. Не могу понять почему так происходит? Т.е я обновляю стейт в событии скролла, но он как-бы все равно не обновляется

18 ответов

22 просмотра

Из-за замыкания. Вешай лог в useEffect

Стас- Автор вопроса
Мороз Аксёнова
Из-за замыкания. Вешай лог в useEffect

Так оно как работает, каждый пиксель прокрутки в событии scroll новый рендер? Просто я же в этом событии меняю стейт, но оно каждую прокрутку выбивает сначала старый, а потом может обновляется как-то

Обработчик получает координаты? На что ты повесил слушатель?

Стас- Автор вопроса
Максим Исаев
Обработчик получает координаты? На что ты повесил ...

Мне нужно чтобы когда допустим прокрутил 50 пикселей от начала страницы, то добавлять классы в dom элементам, допусти _active повесить чтобы поменять позиционирование. Оно вроде всё работает правильно, я только не могу понять, почему когда я отслеживаю скролл в функции переданной в addEventListener, то у меня вечно выдает не обновленный стейт, хотя я же его в этой функции уже и объявил, и оно работает правильно.

Стас
Мне нужно чтобы когда допустим прокрутил 50 пиксел...

Ещё раз. У тебя scroll буквально объявлен как const. Каким образом он должен меняться по твоему?

Стас- Автор вопроса
Стас
Я там поменял на let, разницы нет

Разницы нет. Но и логики тоже нет. Стейт внутри рендера это константа. Он не меняется

Стас- Автор вопроса

Она там не оригинальная, я еще допиливал цвета, ибо оно мало отображало и почти всё красное было

У тебя scroll в замыкании

u can try use ++monokay

Стас- Автор вопроса
Vasiliy
У тебя scroll в замыкании

Т.е функция объявлена при отрисовке компонента, и она видит замкнутое значение стейта в false, и дальше при скролле оно каждый раз меняет на true, но сразу при следующем всё равно видит false и меняет так каждый раз на true?

Стас
Т.е функция объявлена при отрисовке компонента, и ...

Чувак, просто скинь скрин логики компонента

Стас- Автор вопроса

Space Ocean Kit Refined

This is his own theme.

Похожие вопросы

Обсуждают сегодня

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
Ребят в СИ можно реализовать ООП?
Николай
33
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
у вас два процесса. один посылает другому сигнал. у вас есть код обоих процессов? если всё не так - расскажите как оно на самом деле. а именно кто кому чего, есть-ли консоли,...
Karagy
6
Карта сайта