React 19.3 salió el 9 de septiembre de 2026. La mayoría de los artículos sobre el lanzamiento parecen una lista de funciones; yo los leo como una lista del código que puedo eliminar. Frente a React 18, que sigue presente en muchas aplicaciones de producción, la línea 19 trata menos de añadir sintaxis y más de retirar soluciones alternativas que cada equipo tuvo que crear: máquinas de estados para formularios, wrappers de forwardRef, memo por todas partes y comprobaciones de typeof window.
React 19.0 puso los cimientos. Actions y useActionState sustituyeron el trío artesanal isPending / error / data de cada formulario. useOptimistic convirtió la interfaz optimista en un hook en vez de un reducer. use() lee una promesa o un contexto durante el renderizado, incluso de forma condicional. ref pasó a ser una prop normal, por lo que forwardRef es legado; <Context> puede funcionar como su propio provider; <title> y <meta> se elevan a head desde cualquier componente. El cambio también tuvo un coste: desaparecieron las refs de cadena, el contexto heredado, ReactDOM.render y propTypes en componentes de función. Una aplicación React 18 con dependencias antiguas necesita una migración real, no solo subir el número de versión.
React 19.2 y React Compiler 1.0 cambiaron la sensación al desarrollar. <Activity mode="hidden"> mantiene montada una pestaña o la página siguiente con su estado, mientras pausa sus efectos: eso que antes simulábamos con display: none y cruzando los dedos. useEffectEvent acaba con la pelea con la regla exhaustive-deps: el efecto reacciona a roomId, y el callback simplemente lee el tema más reciente. El prerrenderizado parcial (prerender y después resume) permite servir una carcasa estática desde la CDN mientras la parte dinámica llega en streaming. Además, el Compiler hizo innecesaria la mayoría de las llamadas manuales a useMemo, useCallback y React.memo. Las mantengo cuando una biblioteca necesita identidad referencial, pero ya no las añado por costumbre.
React 19.3 se centra en las transiciones y los límites del DOM. <ViewTransition> ya es estable: se envuelve un elemento, se marca la actualización con startTransition y el navegador anima las entradas, salidas y elementos compartidos. addTransitionType permite que «next» y «previous» se deslicen en sentidos distintos dentro de la misma actualización de estado. Las refs de Fragment ofrecen focus(), observeUsing() para IntersectionObserver y mediciones de un grupo de elementos hermanos sin añadir un div contenedor. use(browser()) de react-dom sustituye a typeof window !== "undefined": el componente se suspende en el servidor, muestra el fallback de Suspense y se renderiza en el cliente tras la hidratación. Server Components pueden renderizar <Context value> directamente, sin un archivo provider con «use client»; además, react-dom transmite objetos Trusted Types sin convertirlos a cadenas, de modo que React funciona con una CSP estricta y require-trusted-types-for.
La diferencia se aprecia en los imports. En React 18, un formulario con estado pendiente, actualización optimista y lista animada implicaba tres bibliotecas y un hook propio; en 19.3 basta con useActionState, useOptimistic y <ViewTransition>, todos de React. En 18, «renderizar solo en el cliente» significaba un indicador mounted y un salto de diseño; ahora es una línea y un límite de Suspense. En 18, el rendimiento dependía de aplicar memo con disciplina; ahora el Compiler y React Performance Tracks en Chrome DevTools permiten ver qué bloqueó un frame de verdad.
No daría el salto de 18 a 19.3 en un único pull request para un producto que maneja dinero. Mi proceso es aburrido a propósito: primero 18.3 para sacar a la luz las advertencias de obsolescencia; luego 19 con los codemods oficiales; después probar el Compiler en una ruta detrás de una feature flag; y por último adoptar las nuevas API solo donde eliminen código. La versión 19.3 es aditiva y el anuncio no enumera cambios incompatibles, pero los avisos de seguridad de Server Components de diciembre de 2025 recuerdan que las versiones de parche importan tanto como las principales. Si tu aplicación sigue en 18, envíame package.json y las tres pantallas que más te importan. Te responderé con el orden de actualización y el código que podrás borrar.
Dale al próximo producto alguien que se quede.
¿Listo para empezar? Envíame un mensaje: puedo comenzar ahora y quedarme. Colaboraciones a largo plazo, no una entrega de dos semanas. Hablemos de tu proyecto, requisitos y la mejor forma de avanzar.