Хорошим местом для лучшего понимания того, как реагирует решение перерисовывать элементы, является документация сверки , но я могу подвести итог:
Каждый раз, когда вызывается render (), реагирует на создание нового виртуального DOM, где корневой узел является компонентом, для которого вызывается функция рендеринга. Функция render () вызывается, когда изменяется либо состояние , либо реквизита компонента или любого его дочернего элемента. Функция render () уничтожает все старые виртуальные узлы DOM, начиная с корня, и создает новый виртуальный DOM.
Чтобы гарантировать, что повторное рендеринг компонентов является плавным и эффективным, React использует Алгоритм отклонения , чтобы сократить время, необходимое для создания нового дерева, до временной сложности O (n), обычно сложность времени для копирования деревьев> O (n ^ 2). Это достигается путем использования атрибута «ключ» на каждом из элементов в DOM. React знает, что вместо создания каждого элемента с нуля он может проверить атрибут «ключ» на каждом узле в DOM. Вот почему вы получаете предупреждение, если не устанавливаете атрибут «ключ» для каждого элемента, React использует ключи, чтобы значительно увеличить скорость его рендеринга.