@Maksum77

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

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

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

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

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

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