Разбери, можно ли использовать индекс как ключ: при каких условиях и какие ограничения.
Продвинутые темы
Использовать индекс массива как `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 из данных.