PassFront
  1. PassFront
  2. База знаний
  3. Компоненты

Для чего нужно использовать ключи в React?

Компоненты

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

Проблема без ключей

Алгоритм сравнения (reconciliation) без ключей сопоставляет детей по позиции. Вставка элемента в начало списка сдвигает все позиции — React посчитает, что изменился каждый элемент, и обновит все DOM-узлы, а состояние элементов (введённый текст, фокус) окажется у чужих строк.

С ключами

{messages.map((msg) => (
  <Message key={msg.id} text={msg.text} />
))}

React строит соответствие «key → элемент» и при вставке в начало понимает: существующие элементы те же (переиспользуем DOM и state), добавился один новый.

Требования к ключу

  • Стабильность: одинаковый key у одного и того же элемента данных из рендера в рендер. Math.random() или id, генерируемый в рендере, — антипаттерн (всё пересоздаётся).
  • Уникальность среди соседей — в рамках одного списка.
  • Индекс массива допустим только для статичных списков без добавления/удаления/сортировки и без состояния в элементах.

Бонус: сброс состояния через key

Смена key заставляет React размонтировать и заново смонтировать компонент — приём для сброса формы или переинициализации:

<ProfileForm key={userId} userId={userId} />

Коротко для собеседования

Ключи позволяют React отслеживать идентичность элементов списка между рендерами: переиспользовать DOM-узлы и состояние вместо пересоздания, корректно обрабатывать вставки и сортировки. Ключ — стабильный id из данных, уникальный среди соседей; индекс — только для статичных списков.

Другие вопросы раздела