En este laboratorio vas a practicar la integración de una API externa en una aplicación React. El objetivo es mostrar el listado de personajes de Rick & Morty en la home page.
Demo de la solución: https://frolicking-choux-2fae0a.netlify.app
La aplicación ya tiene configurado el routing y una barra de navegación. Tu trabajo empieza aquí.
src/
├── components/
│ ├── characters/
│ │ ├── characters-list/ ← crearás tu componente aquí
│ │ └── characters-item/ ← crearás tu componente aquí
│ └── ui/
│ └── navbar/
├── pages/
│ └── home-page.jsx ← modificarás esta página
├── services/
│ └── rm-service.js ← crearás el servicio aquí
└── App.jsx
Axios es una librería que facilita las peticiones HTTP. Instálala con:
npm install axiosCrea el archivo src/services/rm-service.js.
Este servicio se encargará de todas las llamadas a la API de Rick & Morty. La URL base de la API es:
https://rickandmortyapi.com/api
El servicio debe exportar una función llamada listCharacters que haga una petición GET al endpoint /character y devuelva el array de personajes.
Puedes consultar la documentación de la API aquí: https://rickandmortyapi.com/documentation/#get-all-characters
Pista: La respuesta de la API tiene esta forma:
{ "info": { ... }, "results": [ array de personajes ] }Tu función debe devolver únicamente el array
resultsy quedarse sólo con la información que necesites.
Crea el archivo src/components/characters/characters-item/character-item.jsx.
Este componente recibe un personaje como prop y muestra su información. Cada personaje tiene, entre otros, los siguientes campos:
| Campo | Descripción |
|---|---|
name |
Nombre del personaje |
image |
URL de la imagen |
status |
Estado: Alive, Dead o unknown |
species |
Especie del personaje |
Como mínimo muestra la imagen, el nombre, el estado y la especie.
Crea el archivo src/components/characters/characters-list/characters-list.jsx.
Este componente es el responsable de obtener los datos de la API y renderizar la lista. Para ello:
- Declara un estado para almacenar el listado de personajes (inicialmente un array vacío).
- Usa el hook
useEffectpara llamar alistCharacterscuando el componente se monte. - Guarda los personajes obtenidos en el estado.
- Itera el estado con
.map()y renderiza unCharacterItempor cada personaje.
Recuerda:
- Cada elemento del
.map()necesita una propkeyúnica. Puedes usarcharacter.id.
Abre src/pages/home-page.jsx y renderiza el componente CharactersList.
HomePage no necesita saber nada sobre los personajes ni sobre la API; esa responsabilidad ya la tiene CharactersList.
Si has completado los pasos anteriores, prueba a añadir estas mejoras:
- Loading state: Muestra un spinner mientras se cargan los personajes. Puedes usar la librería react-spinners (
npm install react-spinners). - Error handling: Si la petición falla, muestra una notificación de error al usuario. Puedes usar react-toastify (
npm install react-toastify). - Filtro por estado: Añade botones para filtrar los personajes por
status(Alive / Dead / Unknown) sin hacer una nueva llamada a la API. - Página de detalle: Crea una nueva ruta
/characters/:idque muestre el detalle de un personaje al hacer clic en su tarjeta. Necesitarás añadir un métodogetCharacter(id)al servicio.