Si buscas «aprender React» encontrarás tutoriales que empiezan con componentes de clase, otros que te mandan instalar herramientas que ya no se mantienen y algunos que dan por hecho que sabes media docena de cosas. Aquí vamos a lo práctico: lo que se usa hoy, en el orden en que lo vas a necesitar.
Para seguirlo necesitas saber HTML, CSS y JavaScript. No hace falta ser un experto, pero sí sentirte cómodo con funciones flecha, desestructuración, módulos y métodos como map o filter. Si te falta algo, repásalo antes en nuestro tutorial de JavaScript moderno: te ahorrará muchas frustraciones.
Qué es React y por qué tanta gente lo usa
React es una biblioteca de JavaScript para construir interfaces de usuario. La creó Meta y hoy la gestiona la React Foundation, dentro de la Linux Foundation. Su idea central es sencilla: divides la interfaz en piezas independientes, los componentes, y describes cómo debe verse cada una según sus datos. Cuando los datos cambian, React actualiza la pantalla por ti.

Por qué merece la pena aprenderlo
Empleo
El más pedido
Es la tecnología de interfaz que más aparece en las ofertas de desarrollo web.
Ecosistema
Solución para todo
Rutas, formularios, gráficos, animaciones: casi cualquier problema ya tiene una biblioteca probada.
Más allá de la web
React Native
Lo que aprendas te sirve para crear aplicaciones móviles para Android e iOS.
Comunidad
Documentación excelente
La documentación oficial, también en español, es de las mejores que existen.
React no es la única opción: Vue, Svelte o Angular resuelven el mismo problema con otros enfoques. Los comparamos en nuestra guía de frameworks de desarrollo web.
Prepara tu entorno de desarrollo
Necesitas tres cosas: Node.js en su versión LTS, un editor de código y un navegador. Si dudas qué editor usar, en nuestra comparativa de VS Code, Zed y Neovim tienes las claves; para empezar, VS Code es la opción más cómoda.
Para crear el proyecto usaremos Vite, una herramienta muy rápida que prepara todo lo necesario. Abre una terminal y escribe:
npm create vite@latest mi-primera-app -- --template react
cd mi-primera-app
npm install
npm run dev
Abre en el navegador la dirección que te indica la terminal y verás la aplicación de ejemplo. Cada vez que guardes un archivo, la página se actualizará sola.
Olvídate de Create React App: muchos tutoriales antiguos usan create-react-app, pero el equipo de React lo retiró oficialmente en febrero de 2025. Para aprender, Vite es lo más sencillo. Cuando hagas aplicaciones completas, la documentación oficial recomienda un framework como Next.js o React Router.
Tu primer componente: JSX y props
Un componente es una función de JavaScript que devuelve lo que debe aparecer en pantalla. Lo que devuelve se escribe en JSX, una sintaxis que se parece a HTML pero vive dentro de JavaScript. Sustituye el contenido de src/App.jsx por esto:
function Saludo({ nombre }) {
return <h2>Hola, {nombre}</h2>;
}
export default function App() {
return (
<main>
<h1>Mi primera app con React</h1>
<Saludo nombre="Ana" />
<Saludo nombre="Luis" />
</main>
);
}

Fíjate en tres detalles. Los componentes empiezan por mayúscula, para que React los distinga de las etiquetas HTML. Lo que va entre llaves es JavaScript, así que puedes poner variables o expresiones. Y nombre es una prop: un dato que el componente padre pasa al hijo, igual que un atributo en HTML.
- En JSX se usa
classNameen lugar declass, porqueclasses una palabra reservada de JavaScript. - Un componente devuelve un solo elemento raíz. Si necesitas varios, envuélvelos en
<>...</>. - Las props son de solo lectura. Un componente nunca modifica las props que recibe.
Estado y eventos con useState
Las props vienen de fuera; el estado es la memoria propia del componente. Cuando cambia, React vuelve a dibujar el componente con el nuevo valor. Se crea con el hook useState:
import { useState } from "react";
export default function Contador() {
const [cuenta, setCuenta] = useState(0);
return (
<button onClick={() => setCuenta(cuenta + 1)}>
Has pulsado {cuenta} veces
</button>
);
}
useState(0) devuelve el valor actual y una función para cambiarlo. Nunca modifiques el estado directamente (cuenta = 5 no funciona): usa siempre la función setCuenta, que es la que avisa a React de que tiene que actualizar la pantalla.
Los hooks tienen dos reglas: se llaman solo dentro de componentes o de otros hooks, y siempre en el nivel superior, nunca dentro de condiciones o bucles.
Listas y renderizado condicional
Para mostrar una lista, recorres un array con map y devuelves un elemento por cada dato. Cada elemento necesita una prop key única, que React usa para saber qué ha cambiado:
const tareas = [
{ id: 1, texto: "Instalar Node.js", hecha: true },
{ id: 2, texto: "Crear el proyecto con Vite", hecha: true },
{ id: 3, texto: "Aprender useEffect", hecha: false },
];
export default function ListaTareas() {
return (
<ul>
{tareas.map((tarea) => (
<li key={tarea.id}>
{tarea.texto} {tarea.hecha && "(hecha)"}
</li>
))}
</ul>
);
}
La expresión tarea.hecha && "(hecha)" es la forma habitual de mostrar algo solo si se cumple una condición. Para elegir entre dos opciones, usa el operador ternario: {hecha ? "Sí" : "No"}.
Efectos y peticiones a una API con useEffect
useEffect sirve para sincronizar el componente con algo externo: una API, un temporizador, una suscripción. El ejemplo típico es cargar datos al mostrar el componente:
import { useEffect, useState } from "react";
export default function Usuarios() {
const [usuarios, setUsuarios] = useState([]);
const [cargando, setCargando] = useState(true);
useEffect(() => {
let cancelado = false;
fetch("https://jsonplaceholder.typicode.com/users")
.then((respuesta) => respuesta.json())
.then((datos) => {
if (!cancelado) {
setUsuarios(datos);
setCargando(false);
}
});
return () => {
cancelado = true;
};
}, []);
if (cargando) return <p>Cargando...</p>;
return (
<ul>
{usuarios.map((u) => <li key={u.id}>{u.name}</li>)}
</ul>
);
}
El array vacío del final indica que el efecto se ejecuta solo una vez, al montar el componente. La función que devuelve el efecto es la limpieza: evita actualizar el estado si el componente ya no está en pantalla. Para practicar con datos reales, en nuestra selección de APIs gratuitas para desarrolladores tienes decenas de opciones.
Un error muy común: usar useEffect para calcular datos a partir del estado o las props. Si un valor se puede calcular directamente durante el renderizado, no necesitas ni efecto ni estado extra: calcúlalo en una variable.
Otros hooks que usarás pronto

| Hook | Para qué sirve | Cuándo usarlo |
|---|---|---|
useContext | Leer datos compartidos sin pasar props por todos los niveles | Tema, idioma, usuario conectado |
useReducer | Gestionar estado con muchas acciones posibles | Carritos, formularios complejos |
useRef | Guardar un valor sin provocar renderizados o acceder a un elemento del DOM | Enfocar un campo, temporizadores |
useMemo y useCallback | Memorizar cálculos y funciones | Solo si hay un problema de rendimiento |
| Hooks propios | Reutilizar lógica entre componentes | Cuando repites el mismo código con hooks |
Sobre useMemo y useCallback, una buena noticia: React Compiler, que alcanzó su primera versión estable en 2025, aplica esas optimizaciones automáticamente. Mientras aprendes, no los uses salvo que midas un problema real.
Formularios con Actions
Las versiones recientes de React simplifican mucho los formularios. Puedes pasar una función directamente a la prop action y usar el hook useActionState para gestionar el resultado y el estado de envío:
import { useActionState } from "react";
async function suscribir(estadoAnterior, formData) {
const email = formData.get("email");
if (!email.includes("@")) return "Introduce un email válido";
// Aquí enviarías el email a tu servidor
return "¡Gracias por suscribirte!";
}
export default function Newsletter() {
const [mensaje, accion, enviando] = useActionState(suscribir, "");
return (
<form action={accion}>
<input name="email" type="email" placeholder="[email protected]" />
<button disabled={enviando}>
{enviando ? "Enviando..." : "Suscribirme"}
</button>
{mensaje && <p>{mensaje}</p>}
</form>
);
}
Para formularios grandes, con muchas validaciones, bibliotecas como React Hook Form siguen siendo muy útiles.
Navegación entre páginas con React Router
Una aplicación de React suele ser una sola página que cambia de contenido sin recargar. Para tener varias «páginas» con su propia dirección, la biblioteca estándar es React Router:
import { BrowserRouter, Routes, Route, Link } from "react-router";
export default function App() {
return (
<BrowserRouter>
<nav>
<Link to="/">Inicio</Link> | <Link to="/tareas">Tareas</Link>
</nav>
<Routes>
<Route path="/" element={<h1>Inicio</h1>} />
<Route path="/tareas" element={<ListaTareas />} />
</Routes>
</BrowserRouter>
);
}
Instálalo con npm install react-router. Link cambia de página sin recargar el navegador, y con useParams puedes leer partes de la dirección, como el identificador de un producto.
En cuanto a los estilos, puedes usar CSS normal, módulos CSS o un framework como Tailwind, el más popular junto a React. Te ayudamos a elegir en nuestra comparativa de frameworks CSS modernos.
Buenas prácticas y siguientes pasos
Tu ruta de aprendizaje
- Practica con proyectos pequeños: una lista de tareas, una app del tiempo con una API, un buscador de películas.
- Control de versiones desde el primer día: sube cada proyecto a GitHub. Si no sabes cómo, sigue nuestro tutorial de Git y GitHub paso a paso.
- TypeScript: cuando domines lo básico, pásate a TypeScript. La mayoría de proyectos profesionales lo usan.
- Datos del servidor: TanStack Query simplifica mucho las peticiones, la caché y los estados de carga.
- Estado global: empieza con Context; si se te queda corto, prueba Zustand.
- Pruebas: Vitest y React Testing Library son la combinación más habitual en proyectos con Vite.
- Un framework: el siguiente gran paso es Next.js o React Router en modo framework, con renderizado en el servidor.
Un asistente de IA te puede ayudar mucho mientras aprendes, siempre que entiendas el código que te propone en lugar de copiarlo sin más. Te explicamos cómo sacarle partido en nuestra guía de GitHub Copilot para programar con IA. Y si prefieres aprender con un libro al lado, hay buenos libros de React en español; comprueba que traten las versiones recientes.
Preguntas frecuentes sobre React
¿Qué necesito saber antes de aprender React?
HTML, CSS y una buena base de JavaScript moderno: variables con let y const, funciones flecha, desestructuración, módulos, métodos de arrays como map y filter, y promesas con async y await. Con eso, React se aprende mucho más rápido.
¿Sigue sirviendo Create React App?
No. El equipo de React lo retiró oficialmente en febrero de 2025. Para aprender, lo más sencillo es crear el proyecto con Vite; para aplicaciones completas, la documentación oficial recomienda usar un framework como Next.js o React Router.
¿Cuánto se tarda en aprender React?
Si ya dominas JavaScript, en dos o tres semanas de práctica puedes hacer aplicaciones sencillas con componentes, estado y peticiones a APIs. Manejarse con soltura en proyectos reales, con rutas, estado global y pruebas, suele llevar unos meses.
¿Necesito usar useMemo y useCallback en todos los componentes?
No. Solo son útiles cuando hay un problema de rendimiento medible. Y React Compiler, cuya primera versión estable se publicó en 2025, aplica esas optimizaciones de forma automática en los proyectos que lo activan.
¿Debo aprender React con TypeScript?
Para tus primeros pasos, JavaScript es suficiente y te permite centrarte en React. En cuanto domines lo básico, merece la pena pasarte a TypeScript, porque la mayoría de proyectos profesionales lo usan y evita muchos errores.
Conclusión: menos teoría, más componentes
Con componentes, props, useState, useEffect, listas y rutas ya puedes construir la mayoría de interfaces que te vas a encontrar. Todo lo demás, desde el estado global hasta el renderizado en servidor, se apoya en estas mismas piezas.
El mejor consejo es el más aburrido: escribe código cada día. Elige un proyecto pequeño que te apetezca de verdad, termínalo y después hazlo un poco más grande. Y cuando el código se te desordene, el formateador de código de TechRecursos lo deja limpio en un momento.
