Как добавить ключ каждому элементу списка в React?
Помогите разобраться с взаимодействием с ключами React. Я передаю в функцию ключ uuid(). Но этот ключ - ключ всего списка (массив с объектами), а я хочу, чтобы в каждом объекте этого массива находился такой уникальный ключ. Код компонента здесь: https://codepen.io/iliyasold/pen/oNoZKov Что я не понимаю здесь? Как это победить?
Ключ должен быть естественным, например Id сущности (в вашем случае комментария) из БД. Если его нет, то не мучайтесь и используйте порядковый номер элемента, как у вас и написано.
Удалять элемент (removeCommentItem) можно и по индексу.
По части ключей почитайте для чего это вообще нужно https://ru.reactjs.org/docs/reconciliation.html#re.... Будет вопрос задайте здесь, я отвечу. Но в первую очередь нужно знать основы DOM, лучше поразбирайтесь с ними, а потом изучайте Реакт.
И да, в офиц. документации, есть предупреждение, что лучше не использовать индекс в качестве ключа, но в вашем примере и так этого ключа нет. В случае использовании uuid вы убиваете всю оптимизацию вообще.
insighter, подскажите, пожалуйста ещё вот какой момент. Я добавил ID к элементам и теперь из массива comments с помощью filter я убираю элементы, по которым кликнул. Если я правильно понимаю, React при этом не станет отрисовывать новый список, так как старый остался неизменным.
Вопрос такой: каким образом данные нового массива newListItem передать в state?
Я пробовал изменить state, добавив в функцию removeCommentItem const [items, setItems] = useState([]); и затем setItems(newListItem), но так ничего не выходит. К тому же, initialstate не пустой получается уже, раз в списке есть элементы. Как это всё записать? Какой тут принцип? Благодарю.
Iliya V. Soldatkin, нужно формировать новый массив. В него копируете всё кроме элемента который удаляете.
Добро пожаловать в мир иммутабельных коллекций.
PS возможно придется переделать логику работы компонента