App
import React, { useState, useEffect } from "react"; import Post from "./Post"; import 'bootstrap/dist/css/bootstrap.min.css'; function App() { const [data, setData] = useState(null); useEffect(() => { fetch("https://jsonplaceholder.typicode.com/posts") .then((response) => response.json()) .then((json) => setData(json)); return () => { console.log("Limpieza de efecto (si aplica)"); }; }, []); // Solo se ejecuta una vez, al montar el componente. const removePost=(id)=>{ setData(data.filter(post=>post.id!=id)) } return ( <div> {data ? <table class="table table-striped"> <thead> <tr> <th>Id</th> <th>Title</th> <th>Body</th> <th>Action</th> </tr> </thead> <tbody> {data.map((post)=> <Post key={post.id} post={post} remove={removePost}/> )} </tbody> </table> : <button class="btn btn-primary"> <span class="spinner-border spinner-border-sm"></span> Cargando... </button>} </div> ); } export default App;
Post
const Post= ({post,remove}) => { return <tr> <td>{post.id}</td> <td>{post.title}</td> <td>{post.body.slice(0,20)}...</td> <td><button class="btn btn-danger" onClick={()=>{remove(post.id)}}>Borrar</button></td> </tr> } export default Post;