Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

358
Visualizações
Reaccionar, cada niño en una lista debe tener un accesorio clave único

Entonces, estoy tratando de hacer una lista de tareas y no funciona cuando intento agregar un elemento a la lista con addItemToList . Estoy recibiendo este error:

 Each child in a list should have a unique “key” prop

Código de la aplicación:

 function App() { const [currentItem, setCurrentItem] = useState(""); const [itemlist, updateItemList] = useState([]); const onChangeHandler = (e) => { setCurrentItem(e.target.value); }; const addItemToList = () => { updateItemList([...itemlist, { item: currentItem, key: Date.now() }]); setCurrentItem(""); }; return ( <div className="App"> <header> <form id="to-do-form"> <input type="text" placeholder="Enter Text" value={currentItem} onChange={onChangeHandler} /> <button onClick={addItemToList} type="submit"> Add </button> </form> <List itemlist={itemlist} />{" "} </header> </div> ); }

Código de lista:

 function List(props) { return ( <div> {props.itemlist.map((itemObj) => { return <p>{itemObj.item}</p>; })} </div> ); }
about 4 years ago · Juan Pablo Isaza
3 Respostas
Responde à pergunta

0

Solución al problema

Asegúrese de que cada elemento dentro de la matriz devuelta por el map tenga una propiedad de clave única.

Dado que cada objeto de elemento en su caso ya tiene una propiedad clave igual a Date.now() , podría usarlo, así:

 function List(props) { return ( <div> {props.itemlist.map((itemObj) => { return <p key={itemObj.key}>{itemObj.item}</p>; })} </div> ); }

Si no tiene un accesorio clave en sus artículos, puede usar index from map , así:

 function List(props) { return ( <div> {props.itemlist.map((itemObj, index) => { return <p key={index}>{itemObj.item}</p>; })} </div> ); }

Relacionado con el comentario de abajo

Está desapareciendo porque la página se actualiza cuando envía el formulario. Debe evitar ese comportamiento cambiando addItemToList de esta manera:

 const addItemToList = (e) => { e.preventDefault(); updateItemList([...itemlist, { item: currentItem, key: Date.now() }]); setCurrentItem(""); };
about 4 years ago · Juan Pablo Isaza Relatório

0

Probablemente tenga un itemlist.map que transforma esta matriz en un elemento jsx para representar.

Este elemento necesita una clave única, es un accesorio que ayuda a reaccionar para representar su lista correctamente.

Entonces, puede pasar este apoyo después de mapear esta lista {itemlist.map(item => <element key={item.UNIQUE_KEY} />)}

Si no tiene una clave única, puede pasar el índice de su mapa, pero no se recomienda porque si modifica esta lista, React volverá a calcular todos esos índices nuevamente.

{itemlist.map((item, index) => <element key={index} />)}

about 4 years ago · Juan Pablo Isaza Relatório

0

Esta pregunta es recurrente y ha sido respondida varias veces. Asegúrese de usar la búsqueda con anticipación antes de publicar preguntas para asegurarse de que su pregunta no esté duplicada.

Pero aquí tienes:

como el error

Advertencia: cada niño en una lista debe tener un accesorio de "clave" único.

estados, React requiere que los niños en una matriz tengan una identidad estable que le permita a React identificar qué elementos se han cambiado, agregado o eliminado durante el ciclo de vida del componente. La identidad se asigna a los componentes con la key prop. Los documentos son muy claros al respecto. De hecho, se recomienda utilizar una cadena que sea única entre todos los hermanos de la lista.

Suponiendo que los elementos tienen nombres únicos, por ejemplo, item1 y item2 , podría hacer algo similar para usarlos como claves de componentes al renderizar:

 function App(){ const [currentItem, setCurrentItem] = useState("") const [itemlist, updateItemList] = useState([]) const onChangeHandler = e => { setCurrentItem(e.target.value) }; const addItemToList = () =>{ updateItemList([...itemlist, {item: currentItem, key: Date.now()}]) setCurrentItem(""); }; return itemlist.map((item) => <p key={item.name} />) }
about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda