Maqueta una Pokédex con React y Ant Design

Resumen

Montar el esqueleto visual de una Pokédex con React y Ant Design es el primer paso para entender cómo Redux encaja después en el flujo de datos. Aquí aprendes a inicializar el proyecto con Create React App, instalar una suite de UI y maquetar los componentes base que luego conectarás a la PokeAPI.

¿Cómo inicializar un proyecto React con Create React App?

El arranque del proyecto se hace con un solo comando en la terminal y deja listo el ambiente para empezar a codear.

El flujo que sigues es directo:

  • Ejecutas npx create-react-app pokedex para generar la estructura base [01:00].
  • Te mueves a la carpeta con cd pokedex y abres Visual Studio Code.
  • Levantas el servidor con npm start para validar que todo corre en el puerto 3000.

Una vez dentro del proyecto, conviene depurar archivos que no necesitas: el logo, reportWebVitals, setupTests y App.test se eliminan junto con sus imports en App.js. En el App.js también reemplazas el tag header por un texto simple como Pokédex para empezar limpio [02:30].

¿Qué hace exactamente Create React App? Es una herramienta de Facebook que genera un proyecto React preconfigurado con Webpack, Babel y un servidor de desarrollo, evitando configuración manual.

¿Por qué usar Ant Design para maquetar más rápido?

La idea del curso es enfocarse en la complejidad de Redux, no en escribir CSS desde cero. Por eso entra Ant Design, una suite de componentes UI lista para producción.

La instalación se hace siguiendo la documentación oficial con el comando npx sal ant, y además agregas el paquete de iconos porque lo vas a necesitar para los favoritos [04:30]. El último paso es importar el CSS de Ant Design dentro de tu App.css para que los estilos queden disponibles en toda la aplicación.

¿Qué es Ant Design? Es una librería de componentes React con elementos preestilizados como inputs, cards, grids e iconos, pensada para construir interfaces empresariales rápido.

¿Cómo construir los componentes Searcher, PokemonCard y PokemonList?

La arquitectura que armas se basa en tres componentes vivos dentro de la carpeta src/components. Cada uno cumple una función puntual dentro de la Pokédex.

Componente Searcher con Input.Search

El primer componente es la barra de búsqueda. Importas Input desde antd y retornas un Input.Search con la prop placeholder en Buscar [06:00]. Para que no ocupe todo el ancho, lo envuelves en el componente Col de Ant Design, asignando span={8} y offset={8}. Así lo centras usando la mitad del grid de 16 columnas.

El espacio superior lo controlas en App.css con un margin-top: 3rem. La unidad rem es relativa al font-size base de 16 píxeles, así que 3rem equivalen a 48 píxeles.

Componente PokemonCard con Card y Meta

La tarjeta de cada Pokémon usa el componente Card de Ant Design con tres propiedades clave [08:00]:

  • title: el nombre del Pokémon, por ejemplo Ditto.
  • cover: una etiqueta img con src y alt para mostrar la imagen.
  • extra: un ícono StarOutlined en la esquina superior derecha para marcar favoritos.

Dentro del children del Card colocas un Card.Meta con la prop description, donde listas los tipos del Pokémon. Para previsualizar el diseño aplicas un width temporal de 240 píxeles inline, que luego retiras cuando el grid tome control.

Componente PokemonList con grid CSS

Este componente recibe un array de pokémons como prop y hace un map para renderizar un PokemonCard por cada uno. Como aún no tienes datos reales, defines defaultProps con un mock:

javascript PokemonList.defaultProps = { pokemons: new Array(10).fill('') }

Esto crea un arreglo de 10 posiciones vacías para validar el render [11:30]. El estilo lo controlas en PokemonList.css con display: grid, grid-template-columns: repeat(4, 1fr) y gap: 2rem, lo que te da cuatro tarjetas por fila con separación pareja.

¿Qué son los defaultProps en React? Son valores por defecto que un componente usa cuando no recibe ciertas props, útiles para hacer mocks mientras conectas la API real.

¿Cómo organizar el espaciado final del layout?

El detalle de pulido visual lo das con CSS plano. Al Searcher le agregas un margin-top: 3rem y un padding lateral de 3rem para separarlo del listado, y al contenedor principal le respetas la convención de espaciado en múltiplos de 3rem para mantener ritmo visual.

Con esto cierras el setup inicial: tienes un proyecto React limpio, Ant Design integrado, tres componentes funcionales y un grid responsivo listo para recibir datos reales. ¿Qué Pokémon vas a buscar primero cuando conectes la PokeAPI? Cuéntame en los comentarios.