fetch.useEffect para realizar solicitudes al montar el componente.fetch() es una API nativa del navegador para hacer peticiones HTTP.fetch("https://jsonplaceholder.typicode.com/users")
.then(res => res.json())
.then(data => console.log(data));
import { useState, useEffect } from "react";
export default function Usuarios() {
const [usuarios, setUsuarios] = useState([]);
useEffect(() => {
fetch("https://jsonplaceholder.typicode.com/users")
.then(res => res.json())
.then(data => setUsuarios(data));
}, []);
return (
<ul>
{usuarios.map(u => (
<li key={u.id}>{u.name}</li>
))}
</ul>
);
}
El arreglo vacío [] hace que la petición se ejecute una sola vez, al montar el componente.
export default function Usuarios() {
const [usuarios, setUsuarios] = useState([]);
const [loading, setLoading] = useState(true);
const [error, setError] = useState(null);
useEffect(() => {
fetch("https://jsonplaceholder.typicode.com/users")
.then(res => {
if (!res.ok) throw new Error("Error en la petición");
return res.json();
})
.then(data => setUsuarios(data))
.catch(err => setError(err.message))
.finally(() => setLoading(false));
}, []);
if (loading) return <p>Cargando...</p>;
if (error) return <p>Error: {error}</p>;
return (
<ul>
{usuarios.map(u => (
<li key={u.id}>{u.name}</li>
))}
</ul>
);
}
{loading && <p>Cargando usuarios...</p>}
{error && <p>Error: {error}</p>}
{!loading && !error && usuarios.length === 0 && <p>No hay usuarios.</p>}
function Usuario({ nombre, correo }) {
return (
<div className="card">
<h4>{nombre}</h4>
<p>{correo}</p>
</div>
);
}
export default function ListaUsuarios({ usuarios }) {
return (
<div>
{usuarios.map(u => (
<Usuario key={u.id} nombre={u.name} correo={u.email} />
))}
</div>
);
}
Separar componentes mejora la legibilidad y reusabilidad del código.
También puedes consumir APIs creadas por ti (por ejemplo, en Node.js o Flask).
fetch("http://localhost:5000/api/usuarios")
.then(res => res.json())
.then(data => setUsuarios(data));
🔒 Si la API requiere autenticación, puedes enviar headers personalizados:
fetch("/api/datos", {
headers: {
Authorization: "Bearer " + token
}
});
useEffect.useFetch).<ListaTareas /> que consuma datos de https://jsonplaceholder.typicode.com/todos.loading y error.fetch o librerías como Axios para consumir APIs.useEffect permite ejecutar peticiones al montar el componente.map().🚀 Con esto ya puedes conectar tu frontend con fuentes de datos reales.