Aprender React desde cero: tutorial paso a paso con ejemplos

React es la biblioteca más usada para crear interfaces web, y lo más difícil no es aprenderla, sino saber por dónde empezar entre tanta información desfasada. En este tutorial vas del primer componente a una pequeña aplicación con estado, peticiones a una API, formularios y rutas, con código que puedes copiar y probar.

Foto del editor del artículo
Frantech Ferras, Staff Editor
Compartir: X (Twitter) Facebook Instagram WhatsApp Email

Editor de código con un componente de React y la aplicación en el navegador

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.


Conceptos básicos de React: componentes, props, estado y renderizado

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>
  );
}

Estructura de un componente de React con JSX y props

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 className en lugar de class, porque class es 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


Ejemplos de uso de los hooks de React más habituales

Hook Para qué sirve Cuándo usarlo
useContextLeer datos compartidos sin pasar props por todos los nivelesTema, idioma, usuario conectado
useReducerGestionar estado con muchas acciones posiblesCarritos, formularios complejos
useRefGuardar un valor sin provocar renderizados o acceder a un elemento del DOMEnfocar un campo, temporizadores
useMemo y useCallbackMemorizar cálculos y funcionesSolo si hay un problema de rendimiento
Hooks propiosReutilizar lógica entre componentesCuando 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.