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

128
Vistas
El elemento de la lista sigue visible incluso después de eliminarlo de la matriz y del almacenamiento local

Tengo un botón llamado sí en el componente secundario donde elimino un elemento de la lista de la matriz y el almacenamiento local usando props.id pasado desde el componente principal.

El problema es que el elemento se elimina de la matriz y del almacenamiento local, pero sigue visible en la pantalla hasta que presiono el botón Eliminar en otro elemento del componente principal.

cuando presiono el botón Eliminar en el componente principal, se abre una superposición. Cuando presiono el botón Sí en la superposición, quiero que el elemento de la lista se elimine de la pantalla de inmediato.

aquí está el código en el componente secundario.

 import React, { useCallback, useState } from "react"; import styles from "./Delete.module.css"; function Delete(props) { // console.log(); const store = props.store; const [no, setNo] = useState(false); let [deleted, setDelted] = useState(store); console.log(deleted); console.log("Length :" + store.length); const noBtnHandler = () => { console.log("clicked"); setNo(!no); props.setDel(false); }; const yesBtnHandler = () => { console.log("Dlete.js :" + props.id); const filteredStore = deleted.filter((task) => task.id !== props.id); setDelted([...filteredStore]); localStorage.removeItem(props.id); // console.log(deleted); setNo(!no); }; return ( <div className={`${no === false ? styles.del : styles.delOn}`}> <section> <div> <h3>Are you Sure ?</h3> </div> <div> <button type="button" onClick={yesBtnHandler}> {" "} Yes{" "} </button> <button type="button" onClick={noBtnHandler}> {" "} No{" "} </button> </div> </section> </div> ); } export default Delete;
about 4 years ago · Juan Pablo Isaza
3 Respuestas
Responde la pregunta

0

Prueba a eliminar el final...

 const yesBtnHandler = () => { console.log("Dlete.js :" + props.id); const filteredStore = deleted.filter((task) => task.id !== props.id); setDelted([filteredStore]); //or setDelted(filteredStore); localStorage.removeItem(props.id); // console.log(deleted); setNo(!no); };
about 4 years ago · Juan Pablo Isaza Denunciar

0

Está pasando la tienda del componente principal al componente Delete y configurando un nuevo estado aquí 'eliminado'. por lo que solo está llamando a setDeleted en el componente Delete que no afectará al componente principal.

La implementación correcta es tener el estado de la tienda en el componente principal si aún no lo tiene. Seguirá siendo el mismo que el estado deleted , pero posiblemente con un nombre mejor. Di const [store, setStore] = useState([])

Defina una función para filtrar un registro en particular tal como lo hizo en el controlador yesBtnHandler . pero esta función se definirá en el componente principal. decir como ejemplo

 const removeRecord = (id) => { const filteredStore = store.filter((task) => task.id !== id); localStorage.removeItem(id); setStore(filteredStore); }

Ahora debe pasar la función a al componente de Delete del padre en lugar de pasar toda la tienda. Me gusta

 <Delete removeFunc= {() => { removeRecord(id) }} />

Después de pasar esta función, debe llamarla en su función yesBtnHandler . Me gusta

 function Delete({removeFunc}) { ... const yesBtnHandler = () => { removeFunc(); setNo(!no); }; }
about 4 years ago · Juan Pablo Isaza Denunciar

0

Según tengo entendido, está tratando de cambiar el estado de un componente principal de un componente secundario. Si eso es lo que pretendes hacer, entonces puedes hacer lo siguiente:

  1. Defina la function Delete(id) {...} dentro del componente principal en lugar del componente secundario.
  2. A continuación, deberá pasar tanto la función como la matriz a su componente secundario, algo como esto: <ChildComponent array={array} onDelete={Delete} , donde matriz es la matriz en su componente principal y Delete es la función para eliminar un elemento de la matriz.
  3. Finalmente, en su componente secundario, con los accesorios pasados correctamente, es decir, function ChildComponent({array, Delete}) {...} ahora puede tener acceso a la matriz en su componente principal y modificarla como usted. me gusta Para activar el detector de eventos en el botón sí del componente secundario, haga lo siguiente: <button type="button" onClick={() => Delete(array.id)}> {" "} Yes{" "} </button>

Espero que esto sea útil.

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