PassFront
  1. PassFront
  2. База знаний
  3. Продвинутые темы

Разбери, можно ли использовать индекс как ключ: при каких условиях и какие ограничения.

Продвинутые темы

Использовать индекс массива как `key` в React можно, но только для статичных списков без добавления, удаления и переупорядочивания. Иначе это ведёт к багам.

Когда индекс допустим

  • Список статичный — не меняется порядок, элементы не добавляются/удаляются в середину.
  • Нет состояния внутри элементов (инпуты, чекбоксы).
  • Нет уникального стабильного id в данных.
{staticItems.map((item, i) => <li key={i}>{item}</li>)} // ок для статики

Почему индекс опасен в динамике

key нужен, чтобы React понимал, какой элемент «тот же». Индекс привязан к позиции, а не к данным. При вставке/удалении/сортировке индексы сдвигаются, и React:

  • путает элементы — приписывает состояние не тому;
  • теряет/сдвигает состояние инпутов;
  • делает лишние перерисовки вместо переиспользования.
// Плохо: удалили первый элемент — все key сдвинулись
{items.map((item, i) => <Input key={i} defaultValue={item.text} />)}

Правильный подход

Использовать стабильный уникальный id из данных:

{items.map((item) => <Input key={item.id} />)}

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

Индекс как key допустим только для статичных списков без переупорядочивания, добавления/удаления и без внутреннего состояния. В динамических списках он вызывает путаницу элементов, потерю состояния и лишние ререндеры — нужен стабильный уникальный id из данных.

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