Как redux определяет, какие компоненты надо обновить?

Redux определяет, какие компоненты нужно обновить, используя механизм подписки и обновления компонентов на основе изменений, называемый "reconciliation" или согласованием.

Как работает согласование в React?
Когда в Redux происходит изменение состояния, React обновляет только те компоненты, которые зависят от измененных данных. Это позволяет оптимизировать производительность, так как компоненты без необходимости не обновляются.

СФера действия компонента и стейт
Каждый компонент в React имеет свою сферу действия, ограниченную его состоянием (state) и пропсами (props). Компонент в React чувствителен только к изменениям в его сфере действия. Если внешние данные изменились, но компонент не использует эти данные, он не будет обновлен.

Подписка на изменения состояния
Redux предлагает подход, называемый "подписка на изменения состояния", где компоненты прослушивают изменения глобального состояния Redux и обновляются только при соответствующих изменениях.

Подписка на изменения состояния осуществляется с помощью функции connect(), которая принимает два аргумента: mapStateToProps и mapDispatchToProps.

mapStateToProps - функция, которая определяет, какие части глобального состояния необходимы компоненту. Эта функция возвращает объект, который передается в компонент через пропсы. React применяет механизм согласования для проверки, изменились ли значения в объекте, и обновляет компонент только при необходимости.

mapDispatchToProps - функция, которая определяет, какие действия (actions) можно вызывать из компонента. Действия в Redux представляют собой JS-объекты, которые описывают тип действия и данные, необходимые для его выполнения. Функция mapDispatchToProps преобразует действия в пропсы компонента и связывает их с Redux store. Когда действие вызывается, Redux определяет, какие компоненты зависят от него и обновляет только их.

Внимание к производительности
Redux обратит внимание на производительность и предотвратит ненужные обновления компонентов. Он использует алгоритм сравнения неглубокой проверки (shallow comparison), который сравнивает ссылки на объекты, а не их содержимое. Таким образом, если изменения происходят в состоянии Redux, Redux сравнивает новое значение с предыдущим и обновляет только те компоненты, которые зависят от этого значения.

В заключение, Redux использует механизм подписки и согласования для определения, какие компоненты нужно обновить при изменении состояния. Этот подход позволяет оптимизировать производительность, обновляя только те компоненты, которые нуждаются в обновлении, и предотвращает ненужные перерисовки компонентов, что является важным аспектом разработки в React.