Emanuelly Leoncio. ¡Hola, dev! ¿Todo bien? Para quienes desarrollan aplicaciones, puede ser necesario consumir una API externa. En este artículo, crearemos una página de React que consumirá la API llamada HP-API, que proporciona una gran cantidad de información sobre los personajes de la película Harry Potter, sus hogares y hechizos.
Nuestro proyecto contendrá cards con el nombre y la foto de algunos alumnos de Hogwarts. También implementaremos un modal, que mostrará más datos del alumno seleccionado, como año de nacimiento, casa y santo patrón. Para conectar nuestro proyecto con la API, usaremos la biblioteca axios.
Nuestro resultado final será el siguiente:
¡Manos a la obra!
Configuración inicial del proyecto
Comencemos el proyecto. Crea una carpeta donde se almacenará. Aquí lo llamaremos react-api. En tu terminal, ejecuta el siguiente código:
npx create-react-app react-api
A continuación:
cd react-api
npm start
Se abrirá una nueva ventana en su navegador, como se muestra en la siguiente figura.
Ahora organizaremos nuestras carpetas y archivos. En este punto, debería tener la siguiente estructura de carpetas:
Podemos eliminar los siguientes archivos:
En la carpeta public:
logo192.png y logo512.png;
manifest.json;
robots.txt.
En la carpeta src removeremos todo menos index.js y App.css;
Es necesario hacer algunos ajustes más:
En la carpeta public, en index.html: eliminar comentarios y referencias de las imágenes que eliminamos. También puedes agregar un título al tag <title>. Aquí colocamos Hogwarts.
Tus carpetas y archivos tienen esta estructura ahora:
Y tu página se verá así:
Ajustando el Main
Comenzamos a ajustar la página principal agregando las fuentes de nuestro proyecto. Aquí usaremos Montserrat y MedievalSharp. Puedes elegir éstas u otras fuentes usando Google Fonts. El link del formato se añadio en index.html.
Ahora, agreguemos algo de información para visualizar mejor la estilización. En index.js, colocaremos el título principal de nuestra página, y un container de información.
Crea una carpeta llamada assets dentro de src. En ella añadiremos las imágenes del escudo de cada una de las cuatro casas de Hogwarts y también un icono de “X” para cerrar el modal que vamos a construir. Puedes encontrar imágenes como éstas fácilmente en la web. Elige las que prefieras y guárdalas en la carpeta.
La estructura de las carpetas quedó así:
Configurando Axios
Para añadir la biblioteca Axios, ejecuta esto en la terminal:
npm install axios
Dentro de src, crea una carpeta llamada services, y dentro de ella, agrega un archivo llamado api.js. En este nuevo archivo, coloca esto:
Para que el proyecto esté más organizado, construiremos dos componentes: Person, por donde pasará la información de cada alumno de Hogwarts, y Modal.
Crea una carpeta llamada components, con otras dos dentro de ella: Person y Modal. Dentro de cada una, añade un archivo index.js y un style.css. Quedaría así:
Componente Person
Vamos a construir el componente Person, que recibirá información del archivo Main por medio de la propitem.
En el archivo Main, vamos a trabajar con dos hooks: useState y useEffect. UseState creará y manejará el estado de la información proveniente de la API que queremos manipular, los estudiantes y sus casas, y tambiém la acción de abrir/cerrar modal y llenarlo con datos del estudiante seleccionado. UseEffect será responsable de ejecutar la función async/await una vez que el componente sea renderizado.
Será en Main donde añadiremos nuestra función async/await, que recuperará la información de la API. Usaremos la ruta "/api/characters/students", la cual devolverá un array de objetos. Cada objeto contiene datos diversos de un alumno y llenaremos nuestro modal con las clave name,house, dateOfBirthday y patronus.
A continuación, se muestra una imagen del objeto obtenido de la API y las claves resaltadas que se utilizarán.
Para hacer seguimiento del consumo de la api externa, incluye el código de abajo en el archivo Main:
Ten en cuenta que las tarjetas de los estudiantes están centradas, pero forman una sola columna. Para ajustar esto y hacer que se alineen horizontalmente, necesitamos ajustar nuestro archivo CSS Main:
Dentro de la carpeta services, crea un archivo llamado data.js. En él agregaremos un array de objetos conteniendo id, nombre de la casa y su respectiva imagen (insertada anteriormente en la carpeta assets), los cuales utilizaremos en nuestro Modal.
Observa que ya agregamos nuestro componente modal y pasamos como props a showModal, handleClose, currentPerson y houseImage para que sean manipulados en el componente.
Finalmente, agreguemos los códigos finales para nuestro componente modal.
En este tutorial, vimos cómo consumir una API externa en un proyecto React, usando la biblioteca axios. En la web se pueden encontrar varias API públicas, con los temas más diferentes. Aquí encontrarás un repositorio de GitHub con una lista muy diversa. ¡Ahora simplemente pon tu creatividad en práctica!
Saludos.
💡
Las opiniones y comentarios emitidos en este artículo son propiedad única de su autor y no necesariamente representan el punto de vista de Listopro.
Listopro Community da la bienvenida a todas las razas, etnias, nacionalidades, credos, géneros, orientaciones, puntos de vista e ideologías, siempre y cuando promuevan la diversidad, la equidad, la inclusión y el crecimiento profesional de los profesionales en tecnología.