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

154
Vistas
¿Cómo mantengo el estado de un componente React después de eliminar otros de una matriz?

Soy nuevo en React y no estoy seguro de lo que estoy haciendo mal aquí. Tengo un componente llamado Bloques que contiene una matriz de subcomponentes en estado. En este momento, cuando agrego el subcomponente Paragraph , lo hago así. Esto está en el componente principal Blocks .

 handleAddBlock(block) { let new_block = null; let last_block_id = this.state.last_block_id; last_block_id++; new_block = { component: <Paragraph key={last_block_id} id={last_block_id} />, id: last_block_id, value: null } this.setState({ last_block_id: last_block_id }); this.setState({ blocks: [...this.state.blocks, new_block] }); }

El componente Párrafo tiene un "valor" de variable de estado, que se actualiza cuando un usuario escribe en un cuadro de texto. Sin embargo, cuando voy a eliminar un elemento de this.state.blocks, todos los componentes que vienen después del componente que estoy eliminando se vuelven a procesar y pierden su estado. Los componentes que vienen antes del elemento que eliminé mantienen los suyos. La pregunta es por qué y cómo puedo evitar que eso suceda. ¿Es este un mal patrón de diseño?

Aquí está el código que maneja la eliminación de un subcomponente. Esto está en el componente principal Blocks .

 handleRemoveBlock(id) { const blocks = [...this.state.blocks].filter(block => { return block.id !== id; }); this.setState({ blocks: blocks }); }

Y finalmente, esto es parte del método render() en el componente principal Blocks .

 render() { const blocks = this.state.blocks.map(block => { return <div key={block.key} className="col p-1" >{block.component} <button className="delete-button" onClick={() => this.handleRemoveBlock(block.id)} type="button">X </button> </div> }) return <section className="row"> <div className="col"> <div className="col"> {blocks} </div> </div> </section> }
about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Tengo un componente llamado Bloques que contiene una matriz de subcomponentes en estado.

no deberías Los componentes deben contener la menor cantidad posible de datos en su estado. El principal concepto de diseño de React es que el método de renderizado del componente es una función pura de los accesorios y el estado. En base a esto, debe mover las instancias de <Paragraph/> (porque debe representar los componentes solo en el render ) y last_block_id (porque es computable desde el estado de los blocks ) del state al render :

 class Block extends React.Component { handleAddBlock(block) { const new_block = { ... } this.setState('blocks', [...this.state.blocks, new_block]) } get last_block_id() { return this.state.blocks.at(-1).id } render() { // your markup return <...> // create Paragraph here {this.state.blocks.map(block => <Paragraph key={block.id} id={block.id} />) <.../> } }
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