Все, кто начинает свою работу с React, думаю, сталкивались с таким warning:

Эта ошибка может быть не только в списках <li>, но также и в других элементах, которые вы «мапите» из переменной (строки таблицы, изображения, блоки с контентом, видео и т.д.).
Для повышения производительности, отслеживания какие именно элементы изменились в DOM, React нужно, чтобы у них был уникальный ключ.
const Todos = (todos) => {
return (
<ul>
{todos.map(todo => (
<li key={todo.id}>{todo.text}</li>
))}
</ul>
)
}
В примере выше, с помощью метода map, мы проходим весь массив todos, который состоит из объектов и на каждой итерации выводим элемент списка с текстом этого таска и задаем уникальный key каждому элементу li.
В методе .map() можно было бы передать второй параметр index — (индекс текущего обрабатываемого элемента в массиве), но так делать не рекомендуется :
const Todos = (todos) => {
return (
<ul>
{todos.map((todo, index) => (
<li key={index}>{todo.text}</li>
))}
</ul>
)
}
Всё дело в том, что при изменении порядка расположения элементов в списке, это может вызвать проблемы с производительностью и путаницу в самом компоненте когда вы добавите новые элементы в список или удалите один из существующих.
Лучшим вариантом, в том случае если вы не можете использовать id, будет использование модуля shortid, который сгенерирует уникальный ключ
import shortid from 'shortid';
const Todos = (todos) => {
return (
<ul>
{todos.map(todo => (
<li key={shortid.generate()}>{todo.text}</li>
))}
</ul>
)
}
Ключи должны быть уникальными только в пределах элементов одного уровня. Т.е. если у вас несколько списков ul на странице, каждый элемент li должен иметь уникальный атрибут key, только в пределах своего ul
Добавить комментарий