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

310
Views
Reactj.s: elemento eliminado solo después de actualizar | Método de eliminación

Estoy tratando de enviar una solicitud de eliminación para eliminar un elemento de una API. La solicitud de API está bien al hacer clic en el botón. ¡Pero el elemento se elimina solo después de actualizar el navegador! No estoy muy seguro de si debería agregar algún parámetro a SetHamsterDeleted para que funcione.

Así es como se ve mi código.

 import React, {useState} from "react"; const Hamster = (props) => { const [hamsterDeleted, setHamsterDeleted] = useState("") async function deleteHamster(id) { const response = await fetch(`/hamsters/${id}`, { method: "DELETE" }); setHamsterDeleted() } return ( <div> <p className={props.hamster ? "" : "hide"}> {hamsterDeleted} </p> <button onClick={() => deleteHamster(props.hamster.id)}>Delete</button> <h2>{props.hamster.name}</h2> <p>Ålder:{props.hamster.age}</p> <p>Favorit mat:{props.hamster.favFood}</p> <p>Matcher:{props.hamster.games}</p> <img src={'./img/' + props.hamster.imgName} alt="hamster"/> </div> ) }; export default Hamster;
 <script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>

about 4 years ago · Juan Pablo Isaza
2 answers
Answer question

0

Imagine que tiene un componente principal (por ejemplo, HamstersList ) que devuelve/presenta una lista de estos componentes de Hamster ; sería preferible declarar ese método deleteHamster en él, por lo que podría: a) pasar algún accesorio como hidden en cada Hamster o b) recuperar la lista de todos los hámsteres de la API después de que uno se haya "eliminado" c) eliminar el hámster "eliminado" de una matriz que se almacenó localmente en ese componente principal de la lista.

Pero dado que está tratando de archivar esto dentro de Hamster , algunos cambios podrían ayudarlo:

  • cambie la línea de state a const [hamsterDeleted, setHamsterDeleted] = useState(false)

  • llame a setHamsterDeleted(true) dentro del método deleteHamster después de la recuperación esperada.

  • un pequeño ajuste de "renderización condicional" dentro de return, para que en realidad no se reproduzca nada cuando el Hamster actual tiene hamsterDeleted establecido en true :

    return hamsterDeleted ? null : (<div>*all your hamster's content here*</div>)

about 4 years ago · Juan Pablo Isaza Report

0

¿Qué quieres hacer en caso de que se elimine el hámster? Si no desea devolver nada, simplemente puede devolver null .

No estoy muy seguro de si debo agregar algún parámetro a SetHamsterDeleted para que funcione.

Sí, haría de esto un booleano en su lugar. Aquí hay un ejemplo:

 import React, { useState } from "react"; const Hamster = (props) => { const [hamsterDeleted, setHamsterDeleted] = useState(false); async function deleteHamster(id) { const response = await fetch(`/hamsters/${id}`, { method: "DELETE" }); setHamsterDeleted(true); } if (hamsterDeleted) return null; return ( <div> <p className={props.hamster ? "" : "hide"}> {hamsterDeleted} </p> <button onClick={() => deleteHamster(props.hamster.id)}>Delete</button> <h2>{props.hamster.name}</h2> <p>Ålder:{props.hamster.age}</p> <p>Favorit mat:{props.hamster.favFood}</p> <p>Matcher:{props.hamster.games}</p> <img src={'./img/' + props.hamster.imgName} alt="hamster"/> </div> ); };

¡SIN EMBARGO! Hacer que cada hámster realice un seguimiento de su estado eliminado no suena bien (por supuesto, no conozco todos sus requisitos, pero parece extraño). Supongo que tiene un componente principal que busca todos los hámsteres; ese sería un mejor lugar para realizar un seguimiento de lo que se ha eliminado y lo que no. De esa manera, si se elimina el hámster, simplemente no podría renderizar ese hámster. Algo más como esto:

 const Hamsters = () => { const [hamsers, setHamsters] = useState([]); // Load the hamsters when the component loads useEffect(() => { const loadHamsters = async () => { const { data } = await fetch(`/hamsters`, { method: "GET" }); setHamsters(data); } loadHamsters(); }, []); // Shared handler to delete a hamster const handleDelete = async (id) => { await fetch(`/hamsters/${id}`, { method: "DELETE" }); setHamsters(prev => prev.filter(h => h.id !== id)); } return ( <> {hamsters.map(hamster => ( <Hamster key={hamster.id} hamster={hamster} onDelete={handleDelete} /> ))} </> ); }

Ahora puede hacer que el componente Hamster sea un componente de presentación que solo se preocupe por representar un hámster, por ejemplo:

 const Hamster = ({ hamster, onDelete }) => { const handleDelete = () => onDelete(hamster.id); return ( <div> <button onClick={handleDelete}>Delete</button> <h2>{hamster.name}</h2> <p>Ålder:{hamster.age}</p> <p>Favorit mat:{hamster.favFood}</p> <p>Matcher:{hamster.games}</p> <img src={'./img/' + hamster.imgName} alt="hamster"/> </div> ); };
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!