Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

334
Vistas
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 Respuestas
Responde la pregunta

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 Denunciar

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 Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda