Почему при присвоении уже имеющегося значения в state, в 1 раз произойдет ререндер?

При работе с React, каждый компонент имеет свой собственный внутренний состояние, которое хранится в объекте state. Когда состояние компонента изменяется, React обновляет пользовательский интерфейс, чтобы отразить эти изменения.

React использует алгоритм сравнения по ссылке, чтобы определить, изменилось ли состояние компонента. Когда вы присваиваете значение уже имеющегося свойства state, React обнаруживает, что ссылка на объект state не изменилась, но внутреннее содержимое объекта изменилось. Поэтому React автоматически обновляет пользовательский интерфейс, чтобы отразить эти изменения.

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

Такое поведение также связано с концепцией чистых компонентов в React. Чистые компоненты не имеют внутреннего состояния и полагаются только на переданные им props для отображения пользовательского интерфейса. Перерисовка происходит только при изменении props, что делает React более эффективным в обработке обновлений.

Избежать ненужного ререндера можно, например, с помощью метода shouldComponentUpdate() или использованием классового компонента PureComponent, который уже сам оптимизирует сравнение по ссылке.

Надеюсь, этот ответ был полезным и помог вам лучше понять, почему при присвоении уже имеющегося значения в state происходит ререндер в React.