Alejandría

Busca en Alejandría

Lenguajes y marcos

React JS

Biblioteca JavaScript para construir interfaces mediante componentes y estado.

01

En pocas palabras

Biblioteca JavaScript para construir interfaces mediante componentes y estado.

Qué problema resuelve

Coordinación de vistas interactivas y reutilización de comportamiento en aplicaciones web.

Cuándo utilizarlo

Aplicaciones con interacción compleja. Ejemplo: un simulador de cuotas con resultados actualizados.

02

De la idea a la práctica

Funcionamiento, ejemplos y decisiones para pasar al siguiente nivel.

En el Radar compartido: Adopt (valoración de la edición aportada).

Cómo funciona

Los componentes describen la interfaz a partir de props y estado. Hooks coordinan comportamiento y composición; el compilador puede automatizar optimizaciones cuando se configura.

Ejemplo de uso

Un componente recibe importe y plazo, calcula una vista derivada y muestra una tabla. Mantener validación de entradas y reglas de negocio separadas de la presentación.

Modelo mental

La interfaz es una función del estado: UI = f(props, estado). Cuando el estado cambia, React vuelve a ejecutar el componente y aplica al DOM solo las diferencias. De ahí salen las reglas prácticas: no mutar el estado, derivar lo que se pueda calcular y mantener el estado lo más cerca posible de donde se usa.

Tipos de estado y dónde vive cada uno

Tipo de estado Ejemplo Herramienta habitual
Local de UI Modal abierto, pestaña activa useState, useReducer
Derivado Total de cuotas a partir del plazo Calcular en el render, sin estado
De servidor Lista de créditos del cliente TanStack Query, SWR o el framework (loaders)
De formulario Campos, errores, envío React Hook Form, acciones de formulario
Global de cliente Usuario, tema, idioma Context o una librería pequeña (Zustand)
En la URL Filtros, página, búsqueda Router (query params)

Tratar los datos del servidor como estado global de cliente es una de las principales fuentes de complejidad innecesaria.

Acciones y formularios (React 19)

import { useActionState } from 'react';

async function simular(
  _: Resultado | null,
  datos: FormData,
): Promise<Resultado> {
  const res = await fetch('/api/simulador', { method: 'POST', body: datos });
  return res.ok ? res.json() : { error: 'No se pudo simular' };
}

export function Simulador() {
  const [resultado, accion, pendiente] = useActionState(simular, null);
  return (
    <form action={accion}>
      <label>
        Monto <input name="monto" type="number" required min={100000} />
      </label>
      <label>
        Plazo (meses){' '}
        <input name="plazo" type="number" required min={3} max={60} />
      </label>
      <button disabled={pendiente}>
        {pendiente ? 'Calculando…' : 'Simular'}
      </button>
      {resultado?.error && <p role="alert">{resultado.error}</p>}
      {resultado?.cuota && <p>Cuota estimada: {resultado.cuota}</p>}
    </form>
  );
}

useOptimistic permite mostrar el resultado esperado mientras la acción se completa, y use lee promesas o contexto dentro del render con Suspense.

Errores frecuentes con useEffect

En lugar de… Mejor
Efecto que sincroniza un estado derivado Calcularlo en el render
Efecto que responde a un clic Lógica en el manejador del evento
fetch en un efecto sin cancelación Librería de datos de servidor o loader del framework
Efecto que reinicia estado al cambiar una prop Cambiar la key del componente

Los efectos sirven para sincronizar con sistemas externos (suscripciones, APIs del navegador, librerías no React).

Rendimiento

El React Compiler memoriza automáticamente componentes y valores, lo que reduce la necesidad de useMemo, useCallback y memo manuales. Antes de optimizar, mide con el Profiler de React DevTools. Las mejoras con más impacto suelen ser: dividir código por rutas, virtualizar listas largas, evitar cascadas de peticiones y no colocar estado que cambia mucho en un contexto muy alto del árbol.

Frameworks

React por sí solo no resuelve rutas, carga de datos ni renderizado en servidor. Para aplicaciones nuevas, la documentación oficial recomienda partir de un framework (Next.js, React Router, Expo para móvil) o de Vite con un router si la aplicación es solo de cliente. Los Server Components requieren un framework que los soporte.

Criterios de implementación

Planificar renderizado, carga de datos y accesibilidad. Medir antes de optimizar y comprobar requisitos del compilador y del framework elegido.

Continúa en las fuentes

Documentación oficial para verificar detalles y explorar más.