@Maksum77

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

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

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

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

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

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