@Dasslier
FrontEnd Developer

Как лучше работать с событием scroll в React?

Нужна помощь.
Пилится интернет-магазин на React, на странице листинга есть сайдбар и сами товары. Если сайдбар меньше в высоту, чем товары, то сайдбар скроллится, если наоборот, товары скроллятся.

Также есть баннер в хедере, который отображается только на страницах листингах, при этом в хедере есть блок, который становится фиксированным, когда до него дойдет скролл.

Скролл сделал, все работает, но беспокоит вот что:
1) В компоненте хедера повесил обработчик scroll, и получается что он отрабатывает постоянно и перерисовывает хедер. По идее ключи никакие не меняются и state меняется только когда скролл проходит отправную точку. Но React devtools выделяет красным мой хедер и componentDidUpdate отрабатывает при каждом скролле.
2) В листинге такая же проблема, при работе со скроллом React devtools показывает ререндер компонентов.

Вопросы:
1) Действительно ли реакт ререндерит эти компоненты? Или он ререндерит только обертку, у которой меняются свойства CSS, заданные через styled-components?
2) Как вообще лучше работать со скроллом? Делать через React или просто подключить отдельный JS файл и работать с DOM напрямую? Знаю, что с React так работать с DOM не нужно, но может это именно тот случай когда стоит?
  • Вопрос задан
  • 2696 просмотров
Решения вопроса 1
rockon404
@rockon404 Куратор тега React
Frontend Developer
По идее ключи никакие не меняются и state меняется только когда скролл проходит отправную точку. Но React devtools выделяет красным мой хедер и componentDidUpdate отрабатывает при каждом скролле.

Скорей всего, просто криво написали код и он работает не так, как вы задумывали. Постоянный вызов componentDidUpdate говорит о том, что на каждый скролл происходит перерисовка.

Действительно ли реакт ререндерит эти компоненты?

Действительно.

Как вообще лучше работать со скроллом? Делать через React или просто подключить отдельный JS файл и работать с DOM напрямую?

Все зависит от задачи. Подключать отдельный файл с нативным кодом точно не стоит.

Знаю, что с React так работать с DOM не нужно

Можно и очень часто бывает нужно. Для этого в React есть рефы.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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