Cuando renderizamos una lista de elementos, React necesita saber qué elementos han cambiado, han sido añadidos o eliminados.
Para ello, React necesita una key única para cada elemento de la lista. Si no le pasamos una key, React usa el índice del elemento como key.
const List = () => {
const [items, setItems] = useState(['Item 1', 'Item 2', 'Item 3'])
return (
<ul>
{items.map((item, index) => (
<li key={index}>{item}</li>
))}
</ul>
)
}
En este caso, React usa el índice del elemento como key
. Esto puede ser un problema si la lista se reordena o se eliminan elementos del array, ya que el índice de los elementos cambia.
En este caso, React no sabe qué elementos han cambiado y puede que se produzcan errores.
Un ejemplo donde se ve el problema:
const List = () => {
const [items, setItems] = useState(['Item 1', 'Item 2', 'Item 3'])
const handleRemove = (index) => {
const newItems = [...items]
newItems.splice(index, 1)
setItems(newItems)
}
return (
<ul>
{items.map((item, index) => (
<li key={index}>
{item}
<button onClick={() => handleRemove(index)}>Eliminar</button>
</li>
))}
</ul>
)
}