Una aplicación React interactiva para explorar y visualizar Pokémon con navegación dinámica y datos detallados.
Crear una aplicación React que muestre las páginas /pokemons y /pokemons/:id utilizando React Router y hooks de React.
- Cargar el listado de pokémons desde
src/data/pokemons.json - Mostrar un pokémon aleatorio cada 3 segundos (rotación automática)
- Al hacer clic sobre el pokémon, navegar a su página de detalle
- Mostrar información completa del pokémon seleccionado
- Incluir un enlace para volver a la página principal
src/
├── pages/
│ ├── PokemonsPage.jsx # Página principal con rotación automática
│ └── PokemonDetail.jsx # Página de detalle del pokémon
├── components/
│ └── PokemonCard.jsx # Componente reutilizable con prop 'full' (boolean)
├── data/
│ └── pokemons.json # Base de datos de pokémons
└── App.jsx # Configuración de rutas
- react-router-dom - Navegación entre páginas
- Hooks necesarios:
useState,useEffect
npm installnpm install react-router-domnpm run devLa aplicación estará disponible en http://localhost:5173
import { BrowserRouter, Routes, Route } from "react-router-dom";
import PokemonsPage from "./pages/PokemonsPage";
import PokemonDetail from "./pages/PokemonDetail";
function App() {
return (
<BrowserRouter>
<Routes>
<Route path="/pokemons" element={<PokemonsPage />} />
<Route path="/pokemon/:id" element={<PokemonDetail />} />
<Route path="/" element={<Navigate to="/pokemons" />} />
</Routes>
</BrowserRouter>
);
}// src/components/PokemonCard.jsx
function PokemonCard({ pokemon, full = false }) {
// Si full=false: vista simplificada
// Si full=true: vista completa con todos los detalles
return (
<div className="pokemon-card">
{/* Renderiza según el valor de 'full' */}
</div>
);
}// src/pages/PokemonsPage.jsx
import { useState, useEffect } from "react";
import { useNavigate } from "react-router-dom";
import pokemonsData from "../data/pokemons.json";
function PokemonsPage() {
const [currentPokemon, setCurrentPokemon] = useState(null);
const navigate = useNavigate();
useEffect(() => {
// Cargar pokémon aleatorio inicial
// Configurar intervalo de 3 segundos
// Limpiar intervalo al desmontar
}, []);
const handlePokemonClick = () => {
navigate(`/pokemon/${currentPokemon.id}`);
};
return <div>{/* Mostrar PokemonCard con full={false} */}</div>;
}// src/pages/PokemonDetail.jsx
import { useParams, Link } from "react-router-dom";
import pokemonsData from "../data/pokemons.json";
function PokemonDetail() {
const { id } = useParams();
const pokemon = pokemonsData.find((p) => p.id === parseInt(id));
return (
<div>
{/* Mostrar PokemonCard con full={true} */}
<Link to="/pokemons">← Volver a la lista</Link>
</div>
);
}¡Buena suerte construyendo tu Pokédex! 🌟