Алгоритм согласования React работает на одном принципе: когда компонент появляется в одном и том же месте при нескольких рендерах, React рассматривает его как один и тот же экземпляр компонента, а не создаёт новый.
React использует позицию компонента и его тип как ключевой идентификатор. Если компонент:
Тогда React переиспользует существующий экземпляр и не вызывает конструктор снова.
Такой подход даёт несколько преимуществ:
// Конструктор вызывается один раз при первичном монтировании
// Конструктор НЕ вызывается при последующих рендерах
<MyComponent /> → конструктор запускается
<MyComponent /> → переиспользуется один и тот же экземпляр
Если позиция или тип компонента изменится, React:
Именно поэтому использование индекса массива в качестве ключа в списках может привести к неожиданным вызовам конструктора — это нарушает позиционную идентификацию React при переупорядочивании элементов.
Конструктор вызывается только один раз потому, что алгоритм согласования React считает компонент, появляющийся в одном и том же месте, идентичным тому, что был при предыдущем рендере. Такой подход сокращает лишнее создание объектов, сохраняя при этом идентичность компонента и его состояние на протяжении всего жизненного цикла.
Алгоритм reconciliation в React определяет, нужно ли переиспользовать компонент, проверяя как его позицию в дереве компонентов, так и его тип, что позволяет одному экземпляру сохраняться между несколькими рендерами.
Новый — ещё не проверен сообществом
Вы