Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

126
Views
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 answers
Answer question

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 Report

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!