Написал простую архитектуру на реакте, когда первый компонент рендерит второй компонент, второй рендерит третий.
компоненты функциональные. пропсов нет у компонентов. если в первом компоненте сделать локальный стейт и менять его, то запускается рендер, что логично, но второй и третий компоненты тоже перерендериваются, вопрос почему? почему реконсилинг не работает, ведь пропсы не меняются у второго и третьего компонентов, их вообще нет, но они перерендериваются?. если меняем на классовые, то это не помогает, помогает только pureComponent, хотя мы знаем, что в нем реализован shouldComponentUpdate, который сравнивает поменялись ли пропсы, но я напомню, что их нет, так же помогает обернуть второй компонент в connect.
кто шарит, можете подсказать поч происходит перерендер второго и третьих компонентов и что там такого делает коннект и pureComponent
Хотя есть идея, что пропсы это же объект, мб в этом дело, получается connect and purecomponent используют мемоизацию?
помогите разобраться
второй и третий компоненты тоже перерендериваются, вопрос почему?
потому что так устроена логика работы реакта.
То что "пропсы не меняются" еще не значит что рендер компонента выдаст то же самое. Может у вас там таймер засунут или еще что.
Поэтому по дефолту реакт вызывает рендер всех затронутых компонентов, и если вы точно знаете что ничего не поменялось, об этом нужно сообщить, shouldComponentUpdate в pureComponent именно это и делает, но ничто вам не мешает написать свой метод. для функциональных компонент на хуках есть React.memo для той же цели.
То что "пропсы не меняются" еще не значит что рендер компонента выдаст то же самое. Может у вас там таймер засунут или еще что.
что за таймер? setInterval? дак и не должен перерендериваться.
насколько я знаю компонент перерендеривается, когда у него меняются пропсы, либо меняется стейт.
сейчас я сколоняюсь к тому, что пропсы это же объект и получаются пропсы приходят всегда новые, тк это ссылочный тип, поэтому и перерендериваются компоненты
насколько я знаю компонент перерендеривается, когда у него меняются пропсы, либо меняется стейт.
это не так. он перерендеривается каждый раз когда реконсилеру нужно новое дерево чтобы сравнить со старым. Если обобщить - то или когда меняется стейт или когда родитель рендерится.
Если вам действительно хочется разобраться, почитайте документации или статьи о том как это все работает под капотом