lleve los fetch a los servicios y creé los tipos de datos

This commit is contained in:
2025-10-14 18:51:59 -03:00
parent d716173606
commit 38f1fd7258
4 changed files with 51 additions and 26 deletions

View File

@@ -1,31 +1,37 @@
import { useEffect, useState } from 'react'; import { useEffect, useState } from 'react';
import './App.css' import './App.css';
import Alumno from './Components/Alumno' import Alumno from './Components/Alumno';
import { ObtenerUsuarios } from './services/servicioUsuario';
function App() {
const [loading, setLoading] = useState(true);
const [alumnos, setAlumnos] = useState<any[]>([]);
function App() { useEffect(() => {
const [loading, setLoading] = useState(true); async function cargarDatos() {
const [alumnos, setAlumnos] = useState<any[]>([]); setLoading(true);
try {
const data = await ObtenerUsuarios();
setAlumnos(data);
} catch (error) {
console.error('Error al obtener usuarios:', error);
} finally {
setLoading(false);
}
}
useEffect(() => { cargarDatos();
fetch("https://jsonplaceholder.typicode.com/users") }, []);
.then(res => res.json())
.then(data => {
setAlumnos(data);
setLoading(false);
})
.catch(() => setLoading(false));
}, []);
if (loading) return <div>Cargando...</div>; if (loading) return <div>Cargando...</div>;
return ( return (
<div style={{ display: 'flex', flexDirection: 'row', gap: "1rem", flexWrap: 'wrap' }}> <div style={{ display: 'flex', flexDirection: 'row', gap: '1rem', flexWrap: 'wrap', justifyContent: "center"}}>
{alumnos.map((x) => ( {alumnos.map((x) => (
<Alumno key={x.id} data={x} /> <Alumno key={x.id} data={x} />
))} ))}
</div> </div>
); );
} }
export default App export default App;

View File

@@ -1,7 +1,8 @@
import { useState } from "react"; import { useState } from "react";
import "./Alumno.css" import "./Alumno.css"
import type { Usuario } from "../types/usuario";
export default function Alumno({data}: {data: any}){ export default function Alumno({data}: {data: Usuario}){
const [alumno, setAlumno] = useState({ presente: false }); const [alumno, setAlumno] = useState({ presente: false });
return ( return (
<div id="aa" <div id="aa"
@@ -22,9 +23,14 @@ export default function Alumno({data}: {data: any}){
<p> <p>
Nombre: <b>{data.name}</b> Nombre: <b>{data.name}</b>
</p> </p>
<p>
<p style={{ color: "gray" }}>
Usuario: <b>{data.username}</b> Usuario: <b>{data.username}</b>
</p> </p>
<p style={{ color: "gray" }}>
Usuario: <b>{data.email}</b>
</p>
</div> </div>
<hr /> <hr />

View File

@@ -0,0 +1,7 @@
import type { Usuario } from "../types/usuario";
export const ObtenerUsuarios = async (): Promise<Usuario[]> => {
const usuario = await fetch(`https://jsonplaceholder.typicode.com/users`);
const usuJson: Usuario[] = await usuario.json();
return usuJson;
};

6
src/types/usuario.ts Normal file
View File

@@ -0,0 +1,6 @@
export interface Usuario {
id: number,
name: string,
username: string,
email: string
}