Задать вопрос
@Maksum77

Как убрать лишние перерендеры?

Написал простую архитектуру на реакте, когда первый компонент рендерит второй компонент, второй рендерит третий.
компоненты функциональные. пропсов нет у компонентов. если в первом компоненте сделать локальный стейт и менять его, то запускается рендер, что логично, но второй и третий компоненты тоже перерендериваются, вопрос почему? почему реконсилинг не работает, ведь пропсы не меняются у второго и третьего компонентов, их вообще нет, но они перерендериваются?. если меняем на классовые, то это не помогает, помогает только pureComponent, хотя мы знаем, что в нем реализован shouldComponentUpdate, который сравнивает поменялись ли пропсы, но я напомню, что их нет, так же помогает обернуть второй компонент в connect.
кто шарит, можете подсказать поч происходит перерендер второго и третьих компонентов и что там такого делает коннект и pureComponent
Хотя есть идея, что пропсы это же объект, мб в этом дело, получается connect and purecomponent используют мемоизацию?
помогите разобраться
  • Вопрос задан
  • 2597 просмотров
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 1
Robur
@Robur
Знаю больше чем это необходимо
второй и третий компоненты тоже перерендериваются, вопрос почему?

потому что так устроена логика работы реакта.
То что "пропсы не меняются" еще не значит что рендер компонента выдаст то же самое. Может у вас там таймер засунут или еще что.

Поэтому по дефолту реакт вызывает рендер всех затронутых компонентов, и если вы точно знаете что ничего не поменялось, об этом нужно сообщить, shouldComponentUpdate в pureComponent именно это и делает, но ничто вам не мешает написать свой метод. для функциональных компонент на хуках есть React.memo для той же цели.
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы
ITK academy Нижний Новгород
от 80 000 до 120 000 ₽
ITK academy Воронеж
от 50 000 до 90 000 ₽