¿Quieres especializarte en React y convertirte en un React Developer profesional en 2025? Este roadmap está diseñado específicamente para dominar React y su ecosistema, desde los conceptos fundamentales hasta las técnicas más avanzadas.
¿Por qué enfocarse en React? React sigue siendo la librería de JavaScript más demandada en el mercado laboral, presente en el 67% de las ofertas de trabajo frontend según Stack Overflow 2025.
🎯 Lo que dominarás al finalizar este roadmap:
- React Fundamentals: Componentes, JSX, Props y State
- React Hooks: useState, useEffect, useContext y hooks personalizados
- Gestión de Estado: Context API, Zustand y React Query
- React Router: Navegación y rutas dinámicas
- Testing: Jest, React Testing Library y pruebas end-to-end
- Performance: Optimización y mejores prácticas
- React 19 Features: Server Components y nuevas APIs
- Deployment: Vercel, Netlify y React Production
📋 Prerrequisitos: Lo que necesitas saber antes
Este roadmap asume que ya tienes conocimientos básicos de:
- JavaScript ES6+: Arrow functions, destructuring, modules
- HTML y CSS: Estructura y estilos básicos
- Git básico: Control de versiones fundamental
Si necesitas reforzar estos temas, te recomendamos nuestro Roadmap Frontend 2025 que cubre todos los fundamentos.
🗓️ Timeline del Roadmap: 16 Semanas Estructuradas
📚 Phase 1: React Fundamentals (Semanas 1-4)
Semana 1: Introducción a React
🔍 ¿Qué es React y por qué usarlo?
React es una librería de JavaScript creada por Facebook para construir interfaces de usuario (UI). Imagínate que tienes una página web como un puzzle - React te permite crear piezas (componentes) reutilizables que puedes combinar para formar páginas completas.
¿Por qué React es tan popular?
- Reutilización: Creas un botón una vez, lo usas en toda la app
- Rapidez: Solo actualiza lo que cambió, no toda la página
- Mercado laboral: 67% de las ofertas de frontend lo requieren
- Ecosistema: Miles de librerías y herramientas disponibles
⚙️ Configuración del entorno: Vite vs Create React App
Para crear proyectos React tienes 2 opciones principales:
🚀 Vite (Recomendado 2025)
- Super rápido (arranque en segundos)
- Usado por proyectos modernos
- Mejor para aprender React puro
📦 Create React App (Clásico)
- Más configuración automática
- Ideal para principiantes absolutos
- Más lento pero más estable
Comando para crear tu primer proyecto:
# Con Vite (recomendado)
npm create vite@latest mi-app-react -- --template react
cd mi-app-react
npm install
npm run dev
# Con Create React App
npx create-react-app mi-app-react
cd mi-app-react
npm start
🧩 Tu primer componente React
Un componente React es como una función que devuelve HTML. Aquí tienes tu primer ejemplo:
// App.js - Tu primer componente
function App() {
return (
<div>
<h1>¡Hola, soy tu primer componente React!</h1>
<p>Esto es mucho más poderoso de lo que parece.</p>
</div>
);
}
export default App;
¿Qué está pasando aquí?
function App()- Creamos una función llamada Appreturn (...)- Devolvemos HTML (que en realidad es JSX)export default- Permitimos usar este componente en otros archivos
📝 JSX: La sintaxis de React
JSX parece HTML pero con superpoderes. Te permite escribir HTML dentro de JavaScript:
// ✅ Esto es JSX válido
const mensaje = "¡Hola desde JavaScript!";
function Saludo() {
return (
<div>
<h2>{mensaje}</h2>
<p>Puedes usar variables JavaScript entre llaves {}</p>
<button onClick={() => alert("¡Funciona!")}>
Haz clic
</button>
</div>
);
}
Reglas importantes de JSX:
- Siempre devuelve UN elemento padre (usa <div> o <React.Fragment>)
- className en lugar de class
- onClick en lugar de onclick
- Cierra todas las etiquetas: <img /> en lugar de <img>
💻 Proyecto: "Hola Mundo" interactivo
Vamos a crear tu primer proyecto React que hace algo real:
// HolaMundo.js
import { useState } from 'react';
function HolaMundo() {
const [nombre, setNombre] = useState('');
const [mostrarSaludo, setMostrarSaludo] = useState(false);
const manejarSaludo = () => {
if (nombre.trim()) {
setMostrarSaludo(true);
}
};
return (
<div style={{padding: '20px', textAlign: 'center'}}>
<h1>Mi Primera App React</h1>
<input
type="text"
placeholder="Escribe tu nombre"
value={nombre}
onChange={(e) => setNombre(e.target.value)}
style={{padding: '10px', marginRight: '10px'}}
/>
<button
onClick={manejarSaludo}
style={{padding: '10px 20px', backgroundColor: '#6366f1', color: 'white', border: 'none', borderRadius: '5px'}}
>
Saludar
</button>
{mostrarSaludo && (
<div style={{marginTop: '20px', padding: '15px', backgroundColor: '#f0f9ff', borderRadius: '8px'}}>
<h2>¡Hola, {nombre}! 👋</h2>
<p>¡Acabas de crear tu primera interacción con React!</p>
</div>
)}
</div>
);
}
export default HolaMundo;
¿Qué aprendes con este proyecto?
- useState: Para manejar datos que cambian
- Eventos: onClick y onChange
- Renderizado condicional: Mostrar/ocultar elementos
- Estilo en línea: CSS directamente en JSX
🎯 Objetivos de la Semana 1:
- ✅ Entender qué es React y por qué se usa
- ✅ Configurar tu entorno de desarrollo
- ✅ Crear tu primer componente funcional
- ✅ Dominar la sintaxis básica de JSX
- ✅ Completar tu primer proyecto interactivo
Al final de esta semana: Tendrás una app React funcionando que responde a la interacción del usuario.
Semana 2: Componentes y Props
🏗️ Componentes funcionales vs de clase
En React hay dos formas de crear componentes. En 2025, solo necesitas saber los componentes funcionales (los de clase están obsoletos):
// ✅ Componente funcional (moderno - React 2025)
function MiComponente() {
return <h1>¡Hola desde un componente funcional!</h1>;
}
// ❌ Componente de clase (antiguo - no usar)
class MiComponenteViejo extends React.Component {
render() {
return <h1>No uses esto en 2025</h1>;
}
}
¿Por qué solo componentes funcionales?
- Más simples: Menos código para hacer lo mismo
- Hooks: useState, useEffect funcionan solo en funcionales
- Performance: React los optimiza mejor
- Futuro: React está enfocado en componentes funcionales
📦 Props: Pasando datos entre componentes
Los Props (propiedades) son la forma de pasar información de un componente padre a un componente hijo. Es como darle ingredientes a una receta:
// Componente hijo que recibe props
function Saludo(props) {
return (
<div>
<h2>¡Hola, {props.nombre}!</h2>
<p>Tu edad es: {props.edad} años</p>
</div>
);
}
// Componente padre que envía props
function App() {
return (
<div>
<Saludo nombre="Ana" edad={25} />
<Saludo nombre="Carlos" edad={30} />
</div>
);
}
Versión mejorada con destructuring (más elegante):
// Mejor práctica: destructuring de props
function Saludo({ nombre, edad }) {
return (
<div>
<h2>¡Hola, {nombre}!</h2>
<p>Tu edad es: {edad} años</p>
</div>
);
}
🧩 Composición de componentes
La composición es combinar componentes pequeños para crear interfaces complejas. Es como construir con bloques de LEGO:
// Componentes pequeños y específicos
function Avatar({ imagen, nombre }) {
return (
<img
src={imagen}
alt={nombre}
style={{width: '50px', height: '50px', borderRadius: '50%'}}
/>
);
}
function InfoUsuario({ nombre, email, rol }) {
return (
<div>
<h3>{nombre}</h3>
<p>{email}</p>
<span style={{background: '#6366f1', color: 'white', padding: '4px 8px', borderRadius: '4px'}}>
{rol}
</span>
</div>
);
}
// Componente compuesto que usa los anteriores
function TarjetaUsuario({ usuario }) {
return (
<div style={{border: '1px solid #ccc', padding: '20px', borderRadius: '8px', display: 'flex', gap: '15px'}}>
<Avatar imagen={usuario.imagen} nombre={usuario.nombre} />
<InfoUsuario
nombre={usuario.nombre}
email={usuario.email}
rol={usuario.rol}
/>
</div>
);
}
✅ PropTypes para validación
PropTypes te ayuda a detectar errores verificando que los props sean del tipo correcto:
import PropTypes from 'prop-types';
function Producto({ nombre, precio, disponible }) {
return (
<div>
<h3>{nombre}</h3>
<p>Precio: €{precio}</p>
<p>{disponible ? '✅ Disponible' : '❌ Agotado'}</p>
</div>
);
}
// Validación de props
Producto.propTypes = {
nombre: PropTypes.string.isRequired, // String obligatorio
precio: PropTypes.number.isRequired, // Número obligatorio
disponible: PropTypes.bool // Boolean opcional
};
// Valores por defecto
Producto.defaultProps = {
disponible: true
};
💻 Proyecto: Tarjeta de perfil reutilizable
Vamos a crear un sistema completo de tarjetas de perfil que puedas usar en cualquier proyecto:
// TarjetaPerfil.js
import PropTypes from 'prop-types';
function TarjetaPerfil({
nombre,
apellido,
email,
avatar,
rol,
activo,
redesSociales
}) {
const estiloTarjeta = {
border: '1px solid #e2e8f0',
borderRadius: '12px',
padding: '24px',
maxWidth: '300px',
textAlign: 'center',
boxShadow: '0 4px 6px rgba(0, 0, 0, 0.1)',
transition: 'transform 0.2s ease',
cursor: 'pointer'
};
const estiloAvatar = {
width: '80px',
height: '80px',
borderRadius: '50%',
margin: '0 auto 16px',
objectFit: 'cover'
};
const estiloRol = {
background: rol === 'Admin' ? '#ef4444' : '#6366f1',
color: 'white',
padding: '4px 12px',
borderRadius: '20px',
fontSize: '12px',
fontWeight: 'bold'
};
return (
<div
style={estiloTarjeta}
onMouseOver={(e) => e.target.style.transform = 'translateY(-5px)'}
onMouseOut={(e) => e.target.style.transform = 'translateY(0)'}
>
<img src={avatar} alt={`${nombre} ${apellido}`} style={estiloAvatar} />
<h3 style={{margin: '0 0 8px 0', color: '#1f2937'}}>
{nombre} {apellido}
</h3>
<p style={{color: '#6b7280', margin: '0 0 12px 0'}}>
{email}
</p>
<div style={{marginBottom: '16px'}}>
<span style={estiloRol}>{rol}</span>
{activo && (
<span style={{marginLeft: '8px', color: '#22c55e'}}>
● Activo
</span>
)}
</div>
{redesSociales && (
<div style={{display: 'flex', justifyContent: 'center', gap: '10px'}}>
{redesSociales.linkedin && (
<a href={redesSociales.linkedin} style={{color: '#0077b5'}}>LinkedIn</a>
)}
{redesSociales.github && (
<a href={redesSociales.github} style={{color: '#333'}}>GitHub</a>
)}
</div>
)}
</div>
);
}
// Validación de props
TarjetaPerfil.propTypes = {
nombre: PropTypes.string.isRequired,
apellido: PropTypes.string.isRequired,
email: PropTypes.string.isRequired,
avatar: PropTypes.string.isRequired,
rol: PropTypes.oneOf(['Usuario', 'Admin', 'Moderador']).isRequired,
activo: PropTypes.bool,
redesSociales: PropTypes.shape({
linkedin: PropTypes.string,
github: PropTypes.string
})
};
export default TarjetaPerfil;
Cómo usar el componente:
// App.js
import TarjetaPerfil from './TarjetaPerfil';
function App() {
const usuarios = [
{
nombre: "Ana",
apellido: "García",
email: "ana@studycodepro.com",
avatar: "https://randomuser.me/api/portraits/women/1.jpg",
rol: "Admin",
activo: true,
redesSociales: {
linkedin: "https://linkedin.com/in/ana-garcia",
github: "https://github.com/ana-garcia"
}
},
{
nombre: "Carlos",
apellido: "López",
email: "carlos@studycodepro.com",
avatar: "https://randomuser.me/api/portraits/men/2.jpg",
rol: "Usuario",
activo: false
}
];
return (
<div style={{display: 'flex', gap: '20px', padding: '20px'}}>
{usuarios.map((usuario, index) => (
<TarjetaPerfil
key={index}
...usuario
/>
))}
</div>
);
}
export default App;
🎯 Objetivos de la Semana 2:
- ✅ Entender la diferencia entre componentes funcionales y de clase
- ✅ Dominar el paso de props entre componentes
- ✅ Crear componentes reutilizables y composables
- ✅ Implementar validación con PropTypes
- ✅ Construir un sistema completo de tarjetas de perfil
Al final de esta semana: Sabrás crear componentes profesionales que puedes reutilizar en cualquier proyecto React.
Semana 4: Listas y Keys
- Renderizado de listas con map()
- Keys en React: ¿Por qué son importantes?
- Filtrado y búsqueda en listas
- Componentes de orden superior básicos
- Proyecto: Lista de tareas (Todo App) básica
⚡ Phase 2: React Hooks Avanzados (Semanas 5-8)
Semana 5: useEffect y Ciclo de Vida
- useEffect: El hook de efectos secundarios
- Cleanup functions
- Dependencias en useEffect
- Llamadas a APIs con useEffect
- Proyecto: Consumidor de API REST
Semana 6: useContext y Gestión Global
- Context API: Estado global sin props drilling
- useContext Hook
- Patrón Provider/Consumer
- Múltiples contextos
- Proyecto: Tema dark/light global
Semana 7: useReducer y Patrones Avanzados
- useReducer: Estado complejo
- Cuándo usar useReducer vs useState
- Combinando useReducer con useContext
- useMemo y useCallback para optimización
- Proyecto: Carrito de compras con useReducer
Semana 8: Custom Hooks
- Creando tus propios hooks
- Hooks para manejo de formularios
- Hooks para llamadas HTTP
- Hooks para localStorage
- Proyecto: Biblioteca de custom hooks reutilizables
🛣️ Phase 3: Navegación y Routing (Semanas 9-10)
Semana 9: React Router Fundamentals
- Instalación y configuración de React Router
- BrowserRouter vs HashRouter
- Route, Routes y navegación básica
- Link vs NavLink
- Proyecto: SPA multipage básica
Semana 10: Routing Avanzado
- Parámetros de ruta (useParams)
- Query strings (useSearchParams)
- Rutas anidadas
- Rutas protegidas y redirecciones
- Proyecto: Blog con rutas dinámicas
🔄 Phase 4: Gestión de Estado Avanzada (Semanas 11-12)
Semana 11: Zustand - Estado Global Moderno
- ¿Por qué Zustand sobre Redux?
- Configuración y stores básicos
- Middleware y persistencia
- Zustand con TypeScript
- Proyecto: E-commerce con Zustand
Semana 12: React Query - Server State
- Diferencia entre client state y server state
- Queries, mutations y caching
- Optimistic updates
- Infinite queries
- Proyecto: Dashboard con datos en tiempo real
🧪 Phase 5: Testing y Optimización (Semanas 13-14)
Semana 13: Testing en React
- Jest y React Testing Library setup
- Testing de componentes
- Mocking de APIs y hooks
- Integration tests
- Proyecto: Test suite completo para app anterior
Semana 14: Performance y Optimización
- React.memo y cuando usarlo
- useMemo y useCallback en profundidad
- Code splitting con React.lazy
- Bundle analysis y optimización
- Proyecto: Optimización de app existente
🚀 Phase 6: React 19 y Deployment (Semanas 15-16)
Semana 15: React 19 New Features
- Server Components básicos
- Actions y Forms mejorados
- use() Hook
- Nuevas APIs de React 19
- Proyecto: App usando React 19 features
Semana 16: Deployment y Producción
- Build optimization para producción
- Deployment en Vercel y Netlify
- Environment variables
- Monitoring y analytics
- Proyecto: Portfolio React desplegado
💼 Proyectos del Portfolio
A lo largo del roadmap construirás estos 3 proyectos principales para tu portfolio:
1. 🛒 E-commerce React App
Stack: React 19, Zustand, React Query, React Router
Features: Catálogo de productos, carrito, checkout, filtros, búsqueda
Aprenderás: Gestión de estado compleja, optimización, UX
2. 📊 Dashboard Analytics
Stack: React, Chart.js, React Query, Mock API
Features: Gráficos interactivos, tiempo real, responsive
Aprenderás: Visualización de datos, performance, APIs
3. 📝 Collaborative Task Manager
Stack: React, Firebase, Real-time updates
Features: Colaboración en tiempo real, auth, notificaciones
Aprenderás: Real-time apps, autenticación, deployment
🎯 Diferencias con Otros Roadmaps
StudyCode Pro vs Otros Roadmaps Populares:
- ✅ Enfoque 100% React: No perdemos tiempo en tecnologías irrelevantes
- ✅ React 19 actualizado: Incluye las últimas features y mejores prácticas
- ✅ Proyectos job-ready: Portfolio real que impresiona a reclutadores
- ✅ Timeline realista: 16 semanas vs promesas de "aprende en 30 días"
- ✅ Contenido en español: Explicaciones claras sin barreras de idioma
- ✅ Zustand sobre Redux: Tecnologías modernas y más simples
📚 Recursos Recomendados
Documentación Oficial:
- React Official Docs - La fuente más actualizada
- React Router Docs - Navegación oficial
- TanStack Query - Server state management
Herramientas de Desarrollo:
- React Developer Tools - Extensión de Chrome/Firefox
- Vite - Build tool rápido para desarrollo
- ESLint + Prettier - Linting y formateo
- Vercel - Platform para deployment
🤔 Preguntas Frecuentes
¿Necesito saber Redux para ser un React Developer?
No. Redux está siendo reemplazado por soluciones más modernas como Zustand y React Query. Este roadmap se enfoca en herramientas actuales del 2025.
¿16 semanas es mucho tiempo para aprender React?
16 semanas te permite dominar React profundamente, no solo saber lo básico. La mayoría de bootcamps toman 12-16 semanas para especialización frontend.
¿Puedo acelerar el roadmap?
Sí, si ya tienes experiencia con JavaScript, puedes completarlo en 8-10 semanas dedicando más horas diarias.
¿Qué diferencia hay con el Roadmap Frontend general?
El roadmap frontend cubre HTML, CSS, JavaScript y React básico. Este roadmap se enfoca exclusivamente en dominar React y su ecosistema completo.
🎯 Siguientes Pasos
¿Listo para comenzar tu journey como React Developer?
💡 Consejo final:
React es una herramienta poderosa, pero la clave del éxito está en construir proyectos reales. No te quedes solo en tutoriales - cada semana de este roadmap incluye práctica hands-on.
Recuerda: El objetivo no es solo aprender React, sino convertirte en un desarrollador que puede resolver problemas reales con React.
🚀 ¿Te gustó este roadmap?
Únete a StudyCode Pro para más roadmaps como este, tutoriales completos y acceso a nuestra comunidad de developers que te ayudará a conseguir tu primer trabajo como React Developer.
📬 Únete Gratis