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

340
Visualizações
SiguienteLa lista dinámica de JS no se actualiza al eliminar/actualizar

Actualmente, mi lista dinámica de react/nextjs no se actualiza correctamente, he dado una matriz para mapear, por lo que mostrará una nueva fila en la actualización del marco ya que está almacenada en useState. Por lo general, el problema es con la clave de la lista que no es único, pero mi clave es única

Aquí está mi código

 const [allSelectedMaterials, setAllSelectedMaterials] = useState([]) // This variable stores a javascript object into the array {console.log('-- Updated --')} {allSelectedMaterials.map((material, i) => { const key = Object.keys(material).toString() console.log(`${i} - [${key}] ${material}`) return ( <div key={key}> <Row className='align-items-center'> <Col xs='auto'> <h6>{material[key].name}</h6> </Col> <Col> <Button variant='danger' className='mb-1' onClick={() => handleDeleteMaterial(key)}> Remove </Button> </Col> </Row> <InputGroup> <InputGroup.Text> <Image src={material[key].image} className={`${styles.allMaterialsImage}`} /> </InputGroup.Text> <Form.Control type='number' min={1} ref={(e) => (selectedMaterials.current[i] = e)} required /> </InputGroup> <div className='mt-1' /> </div> ) })}

El problema es que después de agregar el primer elemento en la lista y agregar uno nuevo, no actualizará la vista, aquí está la salida de la consola

ingrese la descripción de la imagen aquí

Y aquí estoy yo agregando una segunda entrada a la lista

ingrese la descripción de la imagen aquí

Dice claramente en el registro que la matriz (almacenada en useState) se actualiza pero no cambia la vista, sigue siendo la misma que la anterior. Pero si vuelvo a actualizar el marco actualizando cualquier variable useState, actualizó la lista

Actualización: aquí está mi código para agregar material nuevo (loadedMaterials es solo una lista de materiales que se recupera de una API)

 const handleAddSelectedMaterial = () => { loadedMaterials.map((material) => { const key = Object.keys(material) if (key == currentSelectedMaterial) { let _material if (allSelectedMaterials.length > 0) _material = allSelectedMaterials else _material = [] _material.push({ [material[key].id]: material[key] }) setAllSelectedMaterials(_material) } }) }
about 4 years ago · Juan Pablo Isaza
2 Respostas
Responde à pergunta

0

Intenta reemplazar desde

 _material.push({ [material[key].id]: material[key] }) setAllSelectedMaterials(_material)

a

 _material.push({ [material[key].id]: material[key] }) setAllSelectedMaterials([..._material])
about 4 years ago · Juan Pablo Isaza Relatório

0

Gracias a todos por los aportes y las respuestas, pero logré resolver este problema rehaciendo el funcionamiento del formulario y la lista dinámica y ahora funciona perfectamente.

Si alguien se pregunta, básicamente sigo la implementación de esta persona en una lista dinámica https://www.cluemediator.com/add-or-remove-input-fields-dynamically-with-reactjs

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