lleve los fetch a los servicios y creé los tipos de datos
This commit is contained in:
54
src/App.tsx
54
src/App.tsx
@@ -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;
|
||||||
|
|||||||
@@ -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 />
|
||||||
|
|
||||||
|
|||||||
7
src/services/servicioUsuario.ts
Normal file
7
src/services/servicioUsuario.ts
Normal 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
6
src/types/usuario.ts
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
export interface Usuario {
|
||||||
|
id: number,
|
||||||
|
name: string,
|
||||||
|
username: string,
|
||||||
|
email: string
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user