Breaking
💻 Software

React 19: todas las novedades y cómo migrar desde React 18

React 19 llegó como versión estable en diciembre de 2024 con nuevos hooks, Server Actions estables, ref como prop y mejoras sustanciales en el manejo de formularios y estado asíncrono.

16 de junio de 20268 min de lecturapor Junior De Leon
React 19: todas las novedades y cómo migrar desde React 18

React 19: la actualización más importante en años

El 5 de diciembre de 2024, el equipo de React publicó React 19 como versión estable. Después de dos años en desarrollo y meses en beta, llegó con cambios que simplifican patrones comunes que antes requerían librerías externas o código verbose.

Esta es la guía completa de novedades.

Nuevos hooks para estado asíncrono y formularios

useActionState

El nuevo hook useActionState simplifica el manejo de acciones que actualizan estado. Recibe una función (la acción) y un estado inicial, y devuelve el estado actual, la función de dispatch y un booleano de "pendiente".

Antes de React 19, manejar el estado de un formulario con envío asíncrono requería useState, useReducer y lógica manual de loading/error. Con useActionState todo se centraliza en un solo hook.

useFormStatus

Permite que los componentes hijos de un formulario accedan al estado de envío del formulario padre sin prop drilling. El botón de submit puede saber si el formulario está enviándose sin que el padre le pase props explícitamente.

useOptimistic

Facilita las actualizaciones optimistas: mostrar el resultado esperado de una acción inmediatamente mientras se espera la confirmación del servidor. Si la acción falla, el estado vuelve automáticamente al valor anterior.

ref como prop (adiós a forwardRef)

Una de las fricciones más conocidas de React era forwardRef: el patrón verbal necesario para pasar refs a componentes funcionales. En React 19, ref es simplemente una prop más. No se necesita forwardRef ni useImperativeHandle para casos simples.

Los componentes que todavía usan forwardRef siguen funcionando, pero el patrón nuevo es más limpio y fácil de entender.

Context como Provider directamente

Otro cambio de ergonomía: ya no hace falta escribir . Ahora puedes usar directamente. El patrón anterior sigue funcionando, pero quedará deprecado eventualmente.

Server Components y Server Actions estables

React 19 estabiliza los React Server Components (RSC) y los Server Actions, que estaban en uso en frameworks como Next.js pero con advertencias de "experimental".

Los Server Components permiten renderizar componentes en el servidor sin enviar JavaScript al cliente, reduciendo el bundle size. Los Server Actions permiten llamar funciones del servidor directamente desde componentes cliente sin escribir endpoints de API manualmente.

Importante: RSC no es parte de React en sí mismo — es una funcionalidad que los frameworks como Next.js implementan. React 19 establece la API oficial que estos frameworks deben seguir.

El hook use()

use() es un nuevo hook que puede leer el valor de una promesa o un contexto dentro del render. A diferencia de otros hooks, puede usarse dentro de condicionales. Es especialmente útil con Suspense para mostrar estados de carga mientras se resuelven promesas.

Metadatos de documento en componentes

React 19 permite usar tags de metadatos del documento (</code>, <code class="bg-muted px-1.5 py-0.5 rounded text-sm font-mono text-primary"><meta></code>, <code class="bg-muted px-1.5 py-0.5 rounded text-sm font-mono text-primary"><link></code>) directamente dentro de componentes. React los mueve automáticamente al <code class="bg-muted px-1.5 py-0.5 rounded text-sm font-mono text-primary"><head></code> del documento, sin necesidad de librerías como react-helmet.</p><p class="mb-4 text-muted-foreground leading-relaxed"><h2 class="text-xl font-bold mt-8 mb-3 border-b border-border pb-2">Mejoras en la carga de recursos</h2></p><p class="mb-4 text-muted-foreground leading-relaxed">Scripts, hojas de estilo y fuentes ahora pueden declararse en componentes y React garantiza que se carguen antes de que el componente se renderice. Esto reduce los saltos de contenido sin estilo (FOUC) y mejora el rendimiento percibido.</p><p class="mb-4 text-muted-foreground leading-relaxed"><h2 class="text-xl font-bold mt-8 mb-3 border-b border-border pb-2">Cómo migrar desde React 18</h2></p><p class="mb-4 text-muted-foreground leading-relaxed">La migración es relativamente sencilla para la mayoría de proyectos:</p><p class="mb-4 text-muted-foreground leading-relaxed"><ol class="my-4 space-y-1 text-muted-foreground leading-relaxed"><li class="ml-6 list-decimal mb-1">Actualiza React y React DOM a la versión 19</li></p> <li class="ml-6 list-decimal mb-1">Ejecuta el codemods oficiales para actualizar imports deprecados</li> </ol><li class="ml-6 list-decimal mb-1">Busca usos de <code class="bg-muted px-1.5 py-0.5 rounded text-sm font-mono text-primary">forwardRef</code> — puedes migrarlos progresivamente, no es urgente</li> <ol class="my-4 space-y-1 text-muted-foreground leading-relaxed"><li class="ml-6 list-decimal mb-1">Si usas Server Components a través de Next.js, ya están en React 19 desde Next.js 15</li> </ol> <p class="mb-4 text-muted-foreground leading-relaxed">El equipo de React publicó una guía oficial de migración con todos los cambios breaking y sus soluciones. La mayoría de proyectos típicos no tiene cambios breaking significativos.</p><p class="mb-4 text-muted-foreground leading-relaxed"><h2 class="text-xl font-bold mt-8 mb-3 border-b border-border pb-2">Conclusión</h2></p><p class="mb-4 text-muted-foreground leading-relaxed">React 19 no reinventa el framework — lo refina. Los nuevos hooks resuelven patrones de formularios y estado asíncrono que toda aplicación real necesita. La eliminación de <code class="bg-muted px-1.5 py-0.5 rounded text-sm font-mono text-primary">forwardRef</code> y la simplificación del contexto reducen código boilerplate sin cambiar el modelo mental. Y la estabilización de RSC y Server Actions da a los desarrolladores y frameworks una base oficial sobre la que construir.</p><p class="mb-4 text-muted-foreground leading-relaxed">Si llevas tiempo posponiendo la actualización, React 19 es el momento.</p></div><div class="mt-6 flex items-center gap-2 flex-wrap"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-tag w-4 h-4 text-muted-foreground" aria-hidden="true"><path d="M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z"></path><circle cx="7.5" cy="7.5" r=".5" fill="currentColor"></circle></svg><span data-slot="badge" data-variant="secondary" class="group/badge inline-flex h-5 w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-4xl border border-transparent px-2 py-0.5 font-medium whitespace-nowrap transition-all focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&>svg]:pointer-events-none [&>svg]:size-3! bg-secondary text-secondary-foreground [a]:hover:bg-secondary/80 text-xs">react</span><span data-slot="badge" data-variant="secondary" class="group/badge inline-flex h-5 w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-4xl border border-transparent px-2 py-0.5 font-medium whitespace-nowrap transition-all focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&>svg]:pointer-events-none [&>svg]:size-3! bg-secondary text-secondary-foreground [a]:hover:bg-secondary/80 text-xs">javascript</span><span data-slot="badge" data-variant="secondary" class="group/badge inline-flex h-5 w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-4xl border border-transparent px-2 py-0.5 font-medium whitespace-nowrap transition-all focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&>svg]:pointer-events-none [&>svg]:size-3! bg-secondary text-secondary-foreground [a]:hover:bg-secondary/80 text-xs">frontend</span><span data-slot="badge" data-variant="secondary" class="group/badge inline-flex h-5 w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-4xl border border-transparent px-2 py-0.5 font-medium whitespace-nowrap transition-all focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&>svg]:pointer-events-none [&>svg]:size-3! bg-secondary text-secondary-foreground [a]:hover:bg-secondary/80 text-xs">desarrollo</span><span data-slot="badge" data-variant="secondary" class="group/badge inline-flex h-5 w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-4xl border border-transparent px-2 py-0.5 font-medium whitespace-nowrap transition-all focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&>svg]:pointer-events-none [&>svg]:size-3! bg-secondary text-secondary-foreground [a]:hover:bg-secondary/80 text-xs">react19</span></div><div data-orientation="horizontal" role="separator" aria-orientation="horizontal" data-slot="separator" class="shrink-0 bg-border data-horizontal:h-px data-horizontal:w-full data-vertical:w-px data-vertical:self-stretch my-8"></div><div class="flex items-start gap-4 p-4 bg-muted/30 rounded-xl"><div class="w-12 h-12 rounded-full bg-primary/10 flex items-center justify-center text-primary font-bold text-lg shrink-0">J</div><div><p class="font-semibold">Junior De Leon</p><p class="text-sm text-muted-foreground mt-0.5">Editor principal de TechPulse.</p></div></div><div class="text-center mt-8"><ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-3602453940101196" data-ad-slot="2233445566" data-ad-format="horizontal" data-full-width-responsive="true"></ins></div><section class="mt-10"><div data-orientation="horizontal" role="separator" aria-orientation="horizontal" data-slot="separator" class="shrink-0 bg-border data-horizontal:h-px data-horizontal:w-full data-vertical:w-px data-vertical:self-stretch mb-8"></div><h2 class="text-lg font-bold mb-6 flex items-center gap-2"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-message-square w-5 h-5" aria-hidden="true"><path d="M22 17a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 21.286V5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2z"></path></svg>Comentarios</h2><div class="space-y-4 mb-8"><p class="text-sm text-muted-foreground">Sé el primero en comentar.</p></div><div class="bg-muted/20 rounded-2xl p-6 border border-border"><h3 class="font-semibold mb-4 text-base">Deja un comentario</h3><form class="space-y-3"><input id="base-ui-_R_q9clubsnn9fdb_" data-slot="input" placeholder="Tu nombre *" required="" minLength="2" maxLength="60" class="h-8 w-full min-w-0 rounded-lg border border-input bg-transparent px-2.5 py-1 text-base transition-colors outline-none file:inline-flex file:h-6 file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:pointer-events-none disabled:cursor-not-allowed disabled:bg-input/50 disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 md:text-sm dark:bg-input/30 dark:disabled:bg-input/80 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40" value=""/><textarea class="flex min-h-[80px] w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50" placeholder="Escribe tu comentario... (mínimo 10 caracteres)" required="" minLength="10" maxLength="1000" rows="4"></textarea><div class="flex items-center justify-between gap-4"><div class="text-xs text-muted-foreground"></div><div class="flex items-center gap-3"><button type="submit" tabindex="0" data-slot="button" class="group/button inline-flex shrink-0 items-center justify-center border border-transparent bg-clip-padding font-medium whitespace-nowrap transition-all outline-none select-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 active:not-aria-[haspopup]:translate-y-px disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 bg-primary text-primary-foreground hover:bg-primary/80 h-7 rounded-[min(var(--radius-md),12px)] px-2.5 text-[0.8rem] in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3.5 gap-2"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-send w-3.5 h-3.5" aria-hidden="true"><path d="M14.536 21.686a.5.5 0 0 0 .937-.024l6.5-19a.496.496 0 0 0-.635-.635l-19 6.5a.5.5 0 0 0-.024.937l7.93 3.18a2 2 0 0 1 1.112 1.11z"></path><path d="m21.854 2.147-10.94 10.939"></path></svg>Publicar</button></div></div></form></div></section></article><aside class="space-y-6"><div class="text-center "><ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-3602453940101196" data-ad-slot="3344556677" data-ad-format="rectangle" data-full-width-responsive="true"></ins></div><div><h3 class="font-bold text-sm uppercase tracking-wide mb-4">Artículos relacionados</h3><div class="space-y-3"><a href="/software/como-cambio-busqueda-google-ia-agentic-search-2026"><div data-slot="card" data-size="default" class="group/card flex-col overflow-hidden rounded-xl bg-card text-sm text-card-foreground ring-1 ring-foreground/10 [--card-spacing:--spacing(4)] has-data-[slot=card-footer]:pb-0 has-[>img:first-child]:pt-0 data-[size=sm]:[--card-spacing:--spacing(3)] data-[size=sm]:has-data-[slot=card-footer]:pb-0 *:[img:first-child]:rounded-t-xl *:[img:last-child]:rounded-b-xl flex gap-3 p-3 hover:bg-muted/50 transition-colors border-0 shadow-none"><div class="relative w-24 h-16 shrink-0 rounded-md overflow-hidden"><img alt="Por qué tus búsquedas en Google ya no muestran una lista de enlaces: así cambió el buscador con la IA en 2026" loading="lazy" decoding="async" data-nimg="fill" class="object-cover" style="position:absolute;height:100%;width:100%;left:0;top:0;right:0;bottom:0;color:transparent" sizes="96px" srcSet="/_next/image?url=https%3A%2F%2Fimages.unsplash.com%2Fphoto-1499951360447-b19be8fe80f5%3Fw%3D1200%26q%3D80&w=32&q=75 32w, /_next/image?url=https%3A%2F%2Fimages.unsplash.com%2Fphoto-1499951360447-b19be8fe80f5%3Fw%3D1200%26q%3D80&w=48&q=75 48w, /_next/image?url=https%3A%2F%2Fimages.unsplash.com%2Fphoto-1499951360447-b19be8fe80f5%3Fw%3D1200%26q%3D80&w=64&q=75 64w, /_next/image?url=https%3A%2F%2Fimages.unsplash.com%2Fphoto-1499951360447-b19be8fe80f5%3Fw%3D1200%26q%3D80&w=96&q=75 96w, /_next/image?url=https%3A%2F%2Fimages.unsplash.com%2Fphoto-1499951360447-b19be8fe80f5%3Fw%3D1200%26q%3D80&w=128&q=75 128w, /_next/image?url=https%3A%2F%2Fimages.unsplash.com%2Fphoto-1499951360447-b19be8fe80f5%3Fw%3D1200%26q%3D80&w=256&q=75 256w, /_next/image?url=https%3A%2F%2Fimages.unsplash.com%2Fphoto-1499951360447-b19be8fe80f5%3Fw%3D1200%26q%3D80&w=384&q=75 384w, /_next/image?url=https%3A%2F%2Fimages.unsplash.com%2Fphoto-1499951360447-b19be8fe80f5%3Fw%3D1200%26q%3D80&w=640&q=75 640w, /_next/image?url=https%3A%2F%2Fimages.unsplash.com%2Fphoto-1499951360447-b19be8fe80f5%3Fw%3D1200%26q%3D80&w=750&q=75 750w, /_next/image?url=https%3A%2F%2Fimages.unsplash.com%2Fphoto-1499951360447-b19be8fe80f5%3Fw%3D1200%26q%3D80&w=828&q=75 828w, /_next/image?url=https%3A%2F%2Fimages.unsplash.com%2Fphoto-1499951360447-b19be8fe80f5%3Fw%3D1200%26q%3D80&w=1080&q=75 1080w, /_next/image?url=https%3A%2F%2Fimages.unsplash.com%2Fphoto-1499951360447-b19be8fe80f5%3Fw%3D1200%26q%3D80&w=1200&q=75 1200w, /_next/image?url=https%3A%2F%2Fimages.unsplash.com%2Fphoto-1499951360447-b19be8fe80f5%3Fw%3D1200%26q%3D80&w=1920&q=75 1920w, /_next/image?url=https%3A%2F%2Fimages.unsplash.com%2Fphoto-1499951360447-b19be8fe80f5%3Fw%3D1200%26q%3D80&w=2048&q=75 2048w, /_next/image?url=https%3A%2F%2Fimages.unsplash.com%2Fphoto-1499951360447-b19be8fe80f5%3Fw%3D1200%26q%3D80&w=3840&q=75 3840w" src="/_next/image?url=https%3A%2F%2Fimages.unsplash.com%2Fphoto-1499951360447-b19be8fe80f5%3Fw%3D1200%26q%3D80&w=3840&q=75"/></div><div data-slot="card-content" class="p-0 flex flex-col justify-between flex-1"><p class="text-sm font-medium line-clamp-2 leading-snug">Por qué tus búsquedas en Google ya no muestran una lista de enlaces: así cambió el buscador con la IA en 2026</p><span class="text-xs text-muted-foreground">hace 2 días</span></div></div></a><a href="/software/india-bloquea-telegram-examen-neet-fraude-2026"><div data-slot="card" data-size="default" class="group/card flex-col overflow-hidden rounded-xl bg-card text-sm text-card-foreground ring-1 ring-foreground/10 [--card-spacing:--spacing(4)] has-data-[slot=card-footer]:pb-0 has-[>img:first-child]:pt-0 data-[size=sm]:[--card-spacing:--spacing(3)] data-[size=sm]:has-data-[slot=card-footer]:pb-0 *:[img:first-child]:rounded-t-xl *:[img:last-child]:rounded-b-xl flex gap-3 p-3 hover:bg-muted/50 transition-colors border-0 shadow-none"><div class="relative w-24 h-16 shrink-0 rounded-md overflow-hidden"><img alt="India bloquea Telegram para 150 millones de usuarios por fraude en un examen médico" loading="lazy" decoding="async" data-nimg="fill" class="object-cover" style="position:absolute;height:100%;width:100%;left:0;top:0;right:0;bottom:0;color:transparent" sizes="96px" srcSet="/_next/image?url=https%3A%2F%2Fimages.unsplash.com%2Fphoto-1432888622747-4eb9a8efeb07%3Fw%3D1200%26q%3D80&w=32&q=75 32w, /_next/image?url=https%3A%2F%2Fimages.unsplash.com%2Fphoto-1432888622747-4eb9a8efeb07%3Fw%3D1200%26q%3D80&w=48&q=75 48w, /_next/image?url=https%3A%2F%2Fimages.unsplash.com%2Fphoto-1432888622747-4eb9a8efeb07%3Fw%3D1200%26q%3D80&w=64&q=75 64w, /_next/image?url=https%3A%2F%2Fimages.unsplash.com%2Fphoto-1432888622747-4eb9a8efeb07%3Fw%3D1200%26q%3D80&w=96&q=75 96w, /_next/image?url=https%3A%2F%2Fimages.unsplash.com%2Fphoto-1432888622747-4eb9a8efeb07%3Fw%3D1200%26q%3D80&w=128&q=75 128w, /_next/image?url=https%3A%2F%2Fimages.unsplash.com%2Fphoto-1432888622747-4eb9a8efeb07%3Fw%3D1200%26q%3D80&w=256&q=75 256w, /_next/image?url=https%3A%2F%2Fimages.unsplash.com%2Fphoto-1432888622747-4eb9a8efeb07%3Fw%3D1200%26q%3D80&w=384&q=75 384w, /_next/image?url=https%3A%2F%2Fimages.unsplash.com%2Fphoto-1432888622747-4eb9a8efeb07%3Fw%3D1200%26q%3D80&w=640&q=75 640w, /_next/image?url=https%3A%2F%2Fimages.unsplash.com%2Fphoto-1432888622747-4eb9a8efeb07%3Fw%3D1200%26q%3D80&w=750&q=75 750w, /_next/image?url=https%3A%2F%2Fimages.unsplash.com%2Fphoto-1432888622747-4eb9a8efeb07%3Fw%3D1200%26q%3D80&w=828&q=75 828w, /_next/image?url=https%3A%2F%2Fimages.unsplash.com%2Fphoto-1432888622747-4eb9a8efeb07%3Fw%3D1200%26q%3D80&w=1080&q=75 1080w, /_next/image?url=https%3A%2F%2Fimages.unsplash.com%2Fphoto-1432888622747-4eb9a8efeb07%3Fw%3D1200%26q%3D80&w=1200&q=75 1200w, /_next/image?url=https%3A%2F%2Fimages.unsplash.com%2Fphoto-1432888622747-4eb9a8efeb07%3Fw%3D1200%26q%3D80&w=1920&q=75 1920w, /_next/image?url=https%3A%2F%2Fimages.unsplash.com%2Fphoto-1432888622747-4eb9a8efeb07%3Fw%3D1200%26q%3D80&w=2048&q=75 2048w, /_next/image?url=https%3A%2F%2Fimages.unsplash.com%2Fphoto-1432888622747-4eb9a8efeb07%3Fw%3D1200%26q%3D80&w=3840&q=75 3840w" src="/_next/image?url=https%3A%2F%2Fimages.unsplash.com%2Fphoto-1432888622747-4eb9a8efeb07%3Fw%3D1200%26q%3D80&w=3840&q=75"/></div><div data-slot="card-content" class="p-0 flex flex-col justify-between flex-1"><p class="text-sm font-medium line-clamp-2 leading-snug">India bloquea Telegram para 150 millones de usuarios por fraude en un examen médico</p><span class="text-xs text-muted-foreground">hace 3 días</span></div></div></a><a href="/software/meta-edits-escritorio-ia-editor-video-capcut-2026"><div data-slot="card" data-size="default" class="group/card flex-col overflow-hidden rounded-xl bg-card text-sm text-card-foreground ring-1 ring-foreground/10 [--card-spacing:--spacing(4)] has-data-[slot=card-footer]:pb-0 has-[>img:first-child]:pt-0 data-[size=sm]:[--card-spacing:--spacing(3)] data-[size=sm]:has-data-[slot=card-footer]:pb-0 *:[img:first-child]:rounded-t-xl *:[img:last-child]:rounded-b-xl flex gap-3 p-3 hover:bg-muted/50 transition-colors border-0 shadow-none"><div class="relative w-24 h-16 shrink-0 rounded-md overflow-hidden"><img alt="Meta lanza Edits para escritorio con IA integrada y le declara la guerra a CapCut" loading="lazy" decoding="async" data-nimg="fill" class="object-cover" style="position:absolute;height:100%;width:100%;left:0;top:0;right:0;bottom:0;color:transparent" sizes="96px" srcSet="/_next/image?url=https%3A%2F%2Fimages.unsplash.com%2Fphoto-1517694712202-14dd9538aa97%3Fw%3D1200%26q%3D80&w=32&q=75 32w, /_next/image?url=https%3A%2F%2Fimages.unsplash.com%2Fphoto-1517694712202-14dd9538aa97%3Fw%3D1200%26q%3D80&w=48&q=75 48w, /_next/image?url=https%3A%2F%2Fimages.unsplash.com%2Fphoto-1517694712202-14dd9538aa97%3Fw%3D1200%26q%3D80&w=64&q=75 64w, /_next/image?url=https%3A%2F%2Fimages.unsplash.com%2Fphoto-1517694712202-14dd9538aa97%3Fw%3D1200%26q%3D80&w=96&q=75 96w, /_next/image?url=https%3A%2F%2Fimages.unsplash.com%2Fphoto-1517694712202-14dd9538aa97%3Fw%3D1200%26q%3D80&w=128&q=75 128w, /_next/image?url=https%3A%2F%2Fimages.unsplash.com%2Fphoto-1517694712202-14dd9538aa97%3Fw%3D1200%26q%3D80&w=256&q=75 256w, /_next/image?url=https%3A%2F%2Fimages.unsplash.com%2Fphoto-1517694712202-14dd9538aa97%3Fw%3D1200%26q%3D80&w=384&q=75 384w, /_next/image?url=https%3A%2F%2Fimages.unsplash.com%2Fphoto-1517694712202-14dd9538aa97%3Fw%3D1200%26q%3D80&w=640&q=75 640w, /_next/image?url=https%3A%2F%2Fimages.unsplash.com%2Fphoto-1517694712202-14dd9538aa97%3Fw%3D1200%26q%3D80&w=750&q=75 750w, /_next/image?url=https%3A%2F%2Fimages.unsplash.com%2Fphoto-1517694712202-14dd9538aa97%3Fw%3D1200%26q%3D80&w=828&q=75 828w, /_next/image?url=https%3A%2F%2Fimages.unsplash.com%2Fphoto-1517694712202-14dd9538aa97%3Fw%3D1200%26q%3D80&w=1080&q=75 1080w, /_next/image?url=https%3A%2F%2Fimages.unsplash.com%2Fphoto-1517694712202-14dd9538aa97%3Fw%3D1200%26q%3D80&w=1200&q=75 1200w, /_next/image?url=https%3A%2F%2Fimages.unsplash.com%2Fphoto-1517694712202-14dd9538aa97%3Fw%3D1200%26q%3D80&w=1920&q=75 1920w, /_next/image?url=https%3A%2F%2Fimages.unsplash.com%2Fphoto-1517694712202-14dd9538aa97%3Fw%3D1200%26q%3D80&w=2048&q=75 2048w, /_next/image?url=https%3A%2F%2Fimages.unsplash.com%2Fphoto-1517694712202-14dd9538aa97%3Fw%3D1200%26q%3D80&w=3840&q=75 3840w" src="/_next/image?url=https%3A%2F%2Fimages.unsplash.com%2Fphoto-1517694712202-14dd9538aa97%3Fw%3D1200%26q%3D80&w=3840&q=75"/></div><div data-slot="card-content" class="p-0 flex flex-col justify-between flex-1"><p class="text-sm font-medium line-clamp-2 leading-snug">Meta lanza Edits para escritorio con IA integrada y le declara la guerra a CapCut</p><span class="text-xs text-muted-foreground">hace 4 días</span></div></div></a></div></div></aside></div></div><!--$--><!--/$--></main><footer class="bg-muted/50 border-t border-border mt-16"><div class="max-w-7xl mx-auto px-4 py-12"><div class="grid grid-cols-1 md:grid-cols-4 gap-8"><div class="md:col-span-2"><a class="flex items-center gap-2 font-black text-xl mb-3" href="/"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-zap w-5 h-5 text-primary fill-primary" aria-hidden="true"><path d="M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z"></path></svg><span>Tech<span class="text-primary">Pulse</span></span></a><p class="text-muted-foreground text-sm mb-4">Tu fuente de noticias de tecnología e inteligencia artificial. Actualizado cada hora.</p><form class="flex gap-2 max-w-sm"><input id="base-ui-_R_2qp9fdb_" type="email" data-slot="input" placeholder="tu@email.com" class="w-full min-w-0 rounded-lg border border-input bg-transparent px-2.5 py-1 text-base transition-colors outline-none file:inline-flex file:h-6 file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:pointer-events-none disabled:cursor-not-allowed disabled:bg-input/50 disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 md:text-sm dark:bg-input/30 dark:disabled:bg-input/80 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 h-9" value=""/><button type="submit" tabindex="0" data-slot="button" class="group/button inline-flex shrink-0 items-center justify-center border border-transparent bg-clip-padding font-medium whitespace-nowrap transition-all outline-none select-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 active:not-aria-[haspopup]:translate-y-px disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 bg-primary text-primary-foreground hover:bg-primary/80 h-7 gap-1 rounded-[min(var(--radius-md),12px)] px-2.5 text-[0.8rem] in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3.5"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-send w-4 h-4" aria-hidden="true"><path d="M14.536 21.686a.5.5 0 0 0 .937-.024l6.5-19a.496.496 0 0 0-.635-.635l-19 6.5a.5.5 0 0 0-.024.937l7.93 3.18a2 2 0 0 1 1.112 1.11z"></path><path d="m21.854 2.147-10.94 10.939"></path></svg></button></form></div><div><h4 class="font-semibold mb-3 text-sm uppercase tracking-wide">Categorías</h4><ul class="space-y-2 text-sm text-muted-foreground"><li><a class="hover:text-foreground transition-colors" href="/inteligencia-artificial">Inteligencia Artificial</a></li><li><a class="hover:text-foreground transition-colors" href="/gadgets">Gadgets</a></li><li><a class="hover:text-foreground transition-colors" href="/startups">Startups</a></li><li><a class="hover:text-foreground transition-colors" href="/ciberseguridad">Ciberseguridad</a></li><li><a class="hover:text-foreground transition-colors" href="/software">Software</a></li></ul></div><div><h4 class="font-semibold mb-3 text-sm uppercase tracking-wide">Legal</h4><ul class="space-y-2 text-sm text-muted-foreground"><li><a class="hover:text-foreground transition-colors" href="/sobre-nosotros">Sobre nosotros</a></li><li><a class="hover:text-foreground transition-colors" href="/privacidad">Privacidad</a></li><li><a class="hover:text-foreground transition-colors" href="/contacto">Contacto</a></li><li><a href="/rss.xml" class="hover:text-foreground transition-colors">RSS Feed</a></li></ul></div></div><div class="border-t border-border mt-8 pt-6 text-center text-xs text-muted-foreground">© <!-- -->2026<!-- --> TechPulse. Todos los derechos reservados.<!-- --> <!-- -->Este sitio puede contener enlaces de afiliados.</div></div></footer><!--$--><!--/$--><script src="/_next/static/chunks/2zjueh7t2vecu.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[39756,[\"/_next/static/chunks/0bk72m4yhcskw.js\",\"/_next/static/chunks/14mrh2-p_w84d.js\"],\"default\"]\n3:I[37457,[\"/_next/static/chunks/0bk72m4yhcskw.js\",\"/_next/static/chunks/14mrh2-p_w84d.js\"],\"default\"]\n4:I[5014,[\"/_next/static/chunks/0bk72m4yhcskw.js\",\"/_next/static/chunks/14mrh2-p_w84d.js\",\"/_next/static/chunks/19eb1t15vtiwd.js\",\"/_next/static/chunks/1e2ai_wi0mlzp.js\",\"/_next/static/chunks/0znrmovmnm0z-.js\",\"/_next/static/chunks/3598y473kn56a.js\",\"/_next/static/chunks/3moed_z-23wnh.js\",\"/_next/static/chunks/20seezom9r1dk.js\",\"/_next/static/chunks/3yaarhby3n0j2.js\"],\"default\"]\n5:I[22016,[\"/_next/static/chunks/0bk72m4yhcskw.js\",\"/_next/static/chunks/14mrh2-p_w84d.js\",\"/_next/static/chunks/19eb1t15vtiwd.js\",\"/_next/static/chunks/1e2ai_wi0mlzp.js\",\"/_next/static/chunks/0znrmovmnm0z-.js\",\"/_next/static/chunks/3598y473kn56a.js\",\"/_next/static/chunks/3moed_z-23wnh.js\",\"/_next/static/chunks/20seezom9r1dk.js\",\"/_next/static/chunks/3yaarhby3n0j2.js\"],\"\"]\n6:I[72472,[\"/_next/static/chunks/0bk72m4yhcskw.js\",\"/_next/static/chunks/14mrh2-p_w84d.js\",\"/_next/static/chunks/0_bnf357zp-9u.js\"],\"Button\"]\ne:I[68027,[\"/_next/static/chunks/0bk72m4yhcskw.js\",\"/_next/static/chunks/14mrh2-p_w84d.js\"],\"default\",1]\n10:I[2355,[\"/_next/static/chunks/0bk72m4yhcskw.js\",\"/_next/static/chunks/14mrh2-p_w84d.js\"],\"Analytics\"]\n11:I[18359,[\"/_next/static/chunks/0bk72m4yhcskw.js\",\"/_next/static/chunks/14mrh2-p_w84d.js\",\"/_next/static/chunks/19eb1t15vtiwd.js\",\"/_next/static/chunks/1e2ai_wi0mlzp.js\",\"/_next/static/chunks/0znrmovmnm0z-.js\",\"/_next/static/chunks/3598y473kn56a.js\"],\"default\"]\n13:I[3374,[\"/_next/static/chunks/0bk72m4yhcskw.js\",\"/_next/static/chunks/14mrh2-p_w84d.js\",\"/_next/static/chunks/19eb1t15vtiwd.js\",\"/_next/static/chunks/1e2ai_wi0mlzp.js\",\"/_next/static/chunks/0znrmovmnm0z-.js\",\"/_next/static/chunks/3598y473kn56a.js\"],\"default\"]\n14:I[58234,[\"/_next/static/chunks/0bk72m4yhcskw.js\",\"/_next/static/chunks/14mrh2-p_w84d.js\",\"/_next/static/chunks/19eb1t15vtiwd.js\",\"/_next/static/chunks/1e2ai_wi0mlzp.js\",\"/_next/static/chunks/0znrmovmnm0z-.js\",\"/_next/static/chunks/3598y473kn56a.js\"],\"default\"]\n15:I[97813,[\"/_next/static/chunks/0bk72m4yhcskw.js\",\"/_next/static/chunks/14mrh2-p_w84d.js\",\"/_next/static/chunks/19eb1t15vtiwd.js\",\"/_next/static/chunks/1e2ai_wi0mlzp.js\",\"/_next/static/chunks/0znrmovmnm0z-.js\",\"/_next/static/chunks/3598y473kn56a.js\"],\"default\"]\n17:I[97367,[\"/_next/static/chunks/0bk72m4yhcskw.js\",\"/_next/static/chunks/14mrh2-p_w84d.js\"],\"OutletBoundary\"]\n18:\"$Sreact.suspense\"\n1b:I[97367,[\"/_next/static/chunks/0bk72m4yhcskw.js\",\"/_next/static/chunks/14mrh2-p_w84d.js\"],\"ViewportBoundary\"]\n1d:I[97367,[\"/_next/static/chunks/0bk72m4yhcskw.js\",\"/_next/static/chunks/14mrh2-p_w84d.js\"],\"MetadataBoundary\"]\n:HL[\"/_next/static/chunks/0czt1qqad39po.css\",\"style\"]\n:HL[\"/_next/static/media/83afe278b6a6bb3c-s.p.2bn3s6zvc0dyp.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"c\":[\"\",\"software\",\"react-19-novedades-como-migrar-desde-react-18\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"(site)\",{\"children\":[[\"categoria\",\"software\",\"d\",null],{\"children\":[[\"slug\",\"react-19-novedades-como-migrar-desde-react-18\",\"d\",null],{\"children\":[\"__PAGE__\",{}]}]}]}]},\"$undefined\",\"$undefined\",16],[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/0czt1qqad39po.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/0bk72m4yhcskw.js\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-1\",{\"src\":\"/_next/static/chunks/14mrh2-p_w84d.js\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"es\",\"className\":\"inter_5901b7c6-module__ec5Qua__variable\",\"suppressHydrationWarning\":true,\"children\":[[\"$\",\"head\",null,{\"children\":[\"$\",\"script\",null,{\"async\":true,\"src\":\"https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-3602453940101196\",\"crossOrigin\":\"anonymous\"}]}],[\"$\",\"body\",null,{\"className\":\"min-h-screen flex flex-col font-sans antialiased bg-background text-foreground\",\"children\":[[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[\"$\",\"html\",null,{\"lang\":\"es\",\"children\":[\"$\",\"body\",null,{\"className\":\"min-h-screen bg-background text-foreground flex flex-col items-center justify-center px-4\",\"children\":[\"$\",\"div\",null,{\"className\":\"text-center max-w-md\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex items-center justify-center gap-2 mb-6\",\"children\":[[\"$\",\"$L4\",null,{\"ref\":\"$undefined\",\"iconNode\":[[\"path\",{\"d\":\"M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z\",\"key\":\"1xq2db\"}]],\"className\":\"lucide-zap w-7 h-7 text-primary fill-primary\"}],[\"$\",\"span\",null,{\"className\":\"text-2xl font-black\",\"children\":[\"Tech\",[\"$\",\"span\",null,{\"className\":\"text-primary\",\"children\":\"Pulse\"}]]}]]}],[\"$\",\"div\",null,{\"className\":\"text-8xl font-black text-primary/20 leading-none mb-4\",\"children\":\"404\"}],[\"$\",\"h1\",null,{\"className\":\"text-2xl font-bold mb-3\",\"children\":\"Página no encontrada\"}],[\"$\",\"p\",null,{\"className\":\"text-muted-foreground mb-8 leading-relaxed\",\"children\":\"Esta página no existe o fue movida a otra URL. Puede que el artículo haya sido eliminado o que la URL sea incorrecta.\"}],[\"$\",\"div\",null,{\"className\":\"flex flex-col sm:flex-row gap-3 justify-center\",\"children\":[[\"$\",\"$L5\",null,{\"href\":\"/\",\"children\":[\"$\",\"$L6\",null,{\"data-slot\":\"button\",\"className\":\"group/button inline-flex shrink-0 items-center justify-center rounded-lg border border-transparent bg-clip-padding text-sm font-medium whitespace-nowrap transition-all outline-none select-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 active:not-aria-[haspopup]:translate-y-px disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [\u0026_svg]:pointer-events-none [\u0026_svg]:shrink-0 [\u0026_svg:not([class*='size-'])]:size-4 bg-primary text-primary-foreground hover:bg-primary/80 h-8 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2 w-full sm:w-auto\",\"children\":\"Ir al inicio\"}]}],[\"$\",\"$L5\",null,{\"href\":\"/buscar\",\"children\":[\"$\",\"$L6\",null,{\"data-slot\":\"button\",\"className\":\"group/button inline-flex shrink-0 items-center justify-center rounded-lg border bg-clip-padding text-sm font-medium whitespace-nowrap transition-all outline-none select-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 active:not-aria-[haspopup]:translate-y-px disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [\u0026_svg]:pointer-events-none [\u0026_svg]:shrink-0 [\u0026_svg:not([class*='size-'])]:size-4 border-border bg-background hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:border-input dark:bg-input/30 dark:hover:bg-input/50 h-8 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2 w-full sm:w-auto\",\"children\":\"Buscar artículos\"}]}]]}]]}]}]}],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}],\"$L7\"]}]]}]]}],{\"children\":[\"$L8\",{\"children\":[\"$L9\",{\"children\":[\"$La\",{\"children\":[\"$Lb\",{},null,false,null]},null,false,\"$@c\"]},null,false,\"$@c\"]},null,false,null]},null,false,null],\"$Ld\",false]],\"m\":\"$undefined\",\"G\":[\"$e\",[\"$Lf\"]],\"S\":false,\"h\":null,\"s\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\",\"b\":\"Pwss7zlSqcw-vRd7xoeZO\"}\n"])</script><script>self.__next_f.push([1,"7:[\"$\",\"$L10\",null,{}]\n"])</script><script>self.__next_f.push([1,"8:[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/19eb1t15vtiwd.js\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-1\",{\"src\":\"/_next/static/chunks/1e2ai_wi0mlzp.js\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-2\",{\"src\":\"/_next/static/chunks/0znrmovmnm0z-.js\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-3\",{\"src\":\"/_next/static/chunks/3598y473kn56a.js\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"$L11\",null,{\"children\":[\"$L12\",[\"$\",\"$L13\",null,{}],[\"$\",\"main\",null,{\"className\":\"flex-1\",\"children\":[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[\"$\",\"html\",null,{\"lang\":\"es\",\"children\":[\"$\",\"body\",null,{\"className\":\"min-h-screen bg-background text-foreground flex flex-col items-center justify-center px-4\",\"children\":[\"$\",\"div\",null,{\"className\":\"text-center max-w-md\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex items-center justify-center gap-2 mb-6\",\"children\":[[\"$\",\"$L4\",null,{\"ref\":\"$undefined\",\"iconNode\":\"$0:f:0:1:0:props:children:1:props:children:1:props:children:0:props:notFound:0:props:children:props:children:props:children:0:props:children:0:props:iconNode\",\"className\":\"lucide-zap w-7 h-7 text-primary fill-primary\"}],[\"$\",\"span\",null,{\"className\":\"text-2xl font-black\",\"children\":[\"Tech\",[\"$\",\"span\",null,{\"className\":\"text-primary\",\"children\":\"Pulse\"}]]}]]}],[\"$\",\"div\",null,{\"className\":\"text-8xl font-black text-primary/20 leading-none mb-4\",\"children\":\"404\"}],[\"$\",\"h1\",null,{\"className\":\"text-2xl font-bold mb-3\",\"children\":\"Página no encontrada\"}],[\"$\",\"p\",null,{\"className\":\"text-muted-foreground mb-8 leading-relaxed\",\"children\":\"Esta página no existe o fue movida a otra URL. Puede que el artículo haya sido eliminado o que la URL sea incorrecta.\"}],[\"$\",\"div\",null,{\"className\":\"flex flex-col sm:flex-row gap-3 justify-center\",\"children\":[[\"$\",\"$L5\",null,{\"href\":\"/\",\"children\":[\"$\",\"$L6\",null,{\"data-slot\":\"button\",\"className\":\"group/button inline-flex shrink-0 items-center justify-center rounded-lg border border-transparent bg-clip-padding text-sm font-medium whitespace-nowrap transition-all outline-none select-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 active:not-aria-[haspopup]:translate-y-px disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [\u0026_svg]:pointer-events-none [\u0026_svg]:shrink-0 [\u0026_svg:not([class*='size-'])]:size-4 bg-primary text-primary-foreground hover:bg-primary/80 h-8 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2 w-full sm:w-auto\",\"children\":\"Ir al inicio\"}]}],[\"$\",\"$L5\",null,{\"href\":\"/buscar\",\"children\":[\"$\",\"$L6\",null,{\"data-slot\":\"button\",\"className\":\"group/button inline-flex shrink-0 items-center justify-center rounded-lg border bg-clip-padding text-sm font-medium whitespace-nowrap transition-all outline-none select-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 active:not-aria-[haspopup]:translate-y-px disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [\u0026_svg]:pointer-events-none [\u0026_svg]:shrink-0 [\u0026_svg:not([class*='size-'])]:size-4 border-border bg-background hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:border-input dark:bg-input/30 dark:hover:bg-input/50 h-8 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2 w-full sm:w-auto\",\"children\":\"Buscar artículos\"}]}]]}]]}]}]}],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}],[\"$\",\"$L14\",null,{}],[\"$\",\"$L15\",null,{}]]}]]}]\n"])</script><script>self.__next_f.push([1,"9:[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}]\na:[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}]\nb:[\"$\",\"$1\",\"c\",{\"children\":[\"$L16\",[[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/3moed_z-23wnh.js\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-1\",{\"src\":\"/_next/static/chunks/20seezom9r1dk.js\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-2\",{\"src\":\"/_next/static/chunks/3yaarhby3n0j2.js\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"$L17\",null,{\"children\":[\"$\",\"$18\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@19\"}]}]]}]\n1a:[]\nc:\"$W1a\"\nd:[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$L1b\",null,{\"children\":\"$L1c\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$L1d\",null,{\"children\":[\"$\",\"$18\",null,{\"name\":\"Next.Metadata\",\"children\":\"$L1e\"}]}]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}]\nf:[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/0czt1qqad39po.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]\n1c:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n"])</script><script>self.__next_f.push([1,"1f:I[27201,[\"/_next/static/chunks/0bk72m4yhcskw.js\",\"/_next/static/chunks/14mrh2-p_w84d.js\"],\"IconMark\"]\n19:null\n"])</script><script>self.__next_f.push([1,"1e:[[\"$\",\"title\",\"0\",{\"children\":\"React 19: todas las novedades y cómo migrar desde React 18 | TechPulse\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"React 19 llegó como versión estable en diciembre de 2024 con nuevos hooks, Server Actions estables, ref como prop y mejoras sustanciales en el manejo de formularios y estado asíncrono.\"}],[\"$\",\"meta\",\"2\",{\"name\":\"robots\",\"content\":\"index, follow\"}],[\"$\",\"meta\",\"3\",{\"name\":\"google-adsense-account\",\"content\":\"ca-pub-3602453940101196\"}],[\"$\",\"link\",\"4\",{\"rel\":\"canonical\",\"href\":\"https://tecpulse.tech/software/react-19-novedades-como-migrar-desde-react-18\"}],[\"$\",\"meta\",\"5\",{\"property\":\"og:title\",\"content\":\"React 19: todas las novedades y cómo migrar desde React 18\"}],[\"$\",\"meta\",\"6\",{\"property\":\"og:description\",\"content\":\"React 19 llegó como versión estable en diciembre de 2024 con nuevos hooks, Server Actions estables, ref como prop y mejoras sustanciales en el manejo de formularios y estado asíncrono.\"}],[\"$\",\"meta\",\"7\",{\"property\":\"og:url\",\"content\":\"https://tecpulse.tech/software/react-19-novedades-como-migrar-desde-react-18\"}],[\"$\",\"meta\",\"8\",{\"property\":\"og:image\",\"content\":\"https://images.unsplash.com/photo-1633356122544-f134324a6cee?w=1200\u0026h=630\u0026fit=crop\"}],[\"$\",\"meta\",\"9\",{\"property\":\"og:image:width\",\"content\":\"1200\"}],[\"$\",\"meta\",\"10\",{\"property\":\"og:image:height\",\"content\":\"630\"}],[\"$\",\"meta\",\"11\",{\"property\":\"og:type\",\"content\":\"article\"}],[\"$\",\"meta\",\"12\",{\"property\":\"article:published_time\",\"content\":\"2026-06-16T10:00:00+00:00\"}],[\"$\",\"meta\",\"13\",{\"property\":\"article:author\",\"content\":\"Junior De Leon\"}],[\"$\",\"meta\",\"14\",{\"name\":\"twitter:card\",\"content\":\"summary_large_image\"}],[\"$\",\"meta\",\"15\",{\"name\":\"twitter:title\",\"content\":\"React 19: todas las novedades y cómo migrar desde React 18\"}],[\"$\",\"meta\",\"16\",{\"name\":\"twitter:description\",\"content\":\"React 19 llegó como versión estable en diciembre de 2024 con nuevos hooks, Server Actions estables, ref como prop y mejoras sustanciales en el manejo de formularios y estado asíncrono.\"}],[\"$\",\"meta\",\"17\",{\"name\":\"twitter:image\",\"content\":\"https://images.unsplash.com/photo-1633356122544-f134324a6cee?w=1200\u0026h=630\u0026fit=crop\"}],[\"$\",\"link\",\"18\",{\"rel\":\"icon\",\"href\":\"/favicon.ico?favicon.2vob68tjqpejf.ico\",\"sizes\":\"256x256\",\"type\":\"image/x-icon\"}],[\"$\",\"$L1f\",\"19\",{}]]\n"])</script><script>self.__next_f.push([1,"20:I[71736,[\"/_next/static/chunks/0bk72m4yhcskw.js\",\"/_next/static/chunks/14mrh2-p_w84d.js\",\"/_next/static/chunks/19eb1t15vtiwd.js\",\"/_next/static/chunks/1e2ai_wi0mlzp.js\",\"/_next/static/chunks/0znrmovmnm0z-.js\",\"/_next/static/chunks/3598y473kn56a.js\"],\"default\"]\n12:[\"$\",\"$L20\",null,{\"noticias\":[{\"titulo\":\"Nvidia invierte $2,000 millones en Coherent para resolver el mayor cuello de botella de la IA: la velocidad de los datos\",\"href\":\"/inteligencia-artificial/nvidia-invierte-2000-millones-coherent-optica-ia-2026\"},{\"titulo\":\"DeepSeek R1: el modelo chino que sacudió a Silicon Valley y hundió las acciones de NVIDIA\",\"href\":\"/inteligencia-artificial/deepseek-r1-modelo-chino-sacudio-silicon-valley-hundio-acciones-nvidia\"},{\"titulo\":\"Anthropic levantó $65,000 millones y ya vale casi un billón de dólares: la carrera de las startups de IA agéntica\",\"href\":\"/startups/anthropic-65000-millones-valoracion-startups-ia-agentes-2026\"},{\"titulo\":\"Por qué tus búsquedas en Google ya no muestran una lista de enlaces: así cambió el buscador con la IA en 2026\",\"href\":\"/software/como-cambio-busqueda-google-ia-agentic-search-2026\"},{\"titulo\":\"Gemini Nano ya analiza lo que haces en tu Android sin enviarlo a internet: esto es lo que puede ver y cómo desactivarlo\",\"href\":\"/ciberseguridad/gemini-nano-android-privacidad-como-desactivar-2026\"},{\"titulo\":\"Las gafas inteligentes de Google ya tienen fecha de lanzamiento: esto es lo que pueden hacer y cuánto costarán\",\"href\":\"/gadgets/gafas-inteligentes-google-android-xr-precio-lanzamiento-2026\"}]}]\n"])</script><script>self.__next_f.push([1,"21:I[5500,[\"/_next/static/chunks/0bk72m4yhcskw.js\",\"/_next/static/chunks/14mrh2-p_w84d.js\",\"/_next/static/chunks/19eb1t15vtiwd.js\",\"/_next/static/chunks/1e2ai_wi0mlzp.js\",\"/_next/static/chunks/0znrmovmnm0z-.js\",\"/_next/static/chunks/3598y473kn56a.js\",\"/_next/static/chunks/3moed_z-23wnh.js\",\"/_next/static/chunks/20seezom9r1dk.js\",\"/_next/static/chunks/3yaarhby3n0j2.js\"],\"Image\"]\n22:T23a0,"])</script><script>self.__next_f.push([1,"\u003ch2 class=\"text-xl font-bold mt-8 mb-3 border-b border-border pb-2\"\u003eReact 19: la actualización más importante en años\u003c/h2\u003e\u003c/p\u003e\u003cp class=\"mb-4 text-muted-foreground leading-relaxed\"\u003eEl 5 de diciembre de 2024, el equipo de React publicó \u003cstrong class=\"font-semibold text-foreground\"\u003eReact 19\u003c/strong\u003e como versión estable. Después de dos años en desarrollo y meses en beta, llegó con cambios que simplifican patrones comunes que antes requerían librerías externas o código verbose.\u003c/p\u003e\u003cp class=\"mb-4 text-muted-foreground leading-relaxed\"\u003eEsta es la guía completa de novedades.\u003c/p\u003e\u003cp class=\"mb-4 text-muted-foreground leading-relaxed\"\u003e\u003ch2 class=\"text-xl font-bold mt-8 mb-3 border-b border-border pb-2\"\u003eNuevos hooks para estado asíncrono y formularios\u003c/h2\u003e\u003c/p\u003e\u003cp class=\"mb-4 text-muted-foreground leading-relaxed\"\u003e\u003ch3 class=\"text-lg font-bold mt-6 mb-2\"\u003euseActionState\u003c/h3\u003e\n\u003cp class=\"mb-4 text-muted-foreground leading-relaxed\"\u003eEl nuevo hook \u003ccode class=\"bg-muted px-1.5 py-0.5 rounded text-sm font-mono text-primary\"\u003euseActionState\u003c/code\u003e simplifica el manejo de acciones que actualizan estado. Recibe una función (la acción) y un estado inicial, y devuelve el estado actual, la función de dispatch y un booleano de \"pendiente\".\u003c/p\u003e\u003cp class=\"mb-4 text-muted-foreground leading-relaxed\"\u003eAntes de React 19, manejar el estado de un formulario con envío asíncrono requería \u003ccode class=\"bg-muted px-1.5 py-0.5 rounded text-sm font-mono text-primary\"\u003euseState\u003c/code\u003e, \u003ccode class=\"bg-muted px-1.5 py-0.5 rounded text-sm font-mono text-primary\"\u003euseReducer\u003c/code\u003e y lógica manual de loading/error. Con \u003ccode class=\"bg-muted px-1.5 py-0.5 rounded text-sm font-mono text-primary\"\u003euseActionState\u003c/code\u003e todo se centraliza en un solo hook.\u003c/p\u003e\u003cp class=\"mb-4 text-muted-foreground leading-relaxed\"\u003e\u003ch3 class=\"text-lg font-bold mt-6 mb-2\"\u003euseFormStatus\u003c/h3\u003e\u003c/p\u003e\n\u003cp class=\"mb-4 text-muted-foreground leading-relaxed\"\u003ePermite que los componentes hijos de un formulario accedan al estado de envío del formulario padre sin prop drilling. El botón de submit puede saber si el formulario está enviándose sin que el padre le pase props explícitamente.\u003c/p\u003e\u003cp class=\"mb-4 text-muted-foreground leading-relaxed\"\u003e\u003ch3 class=\"text-lg font-bold mt-6 mb-2\"\u003euseOptimistic\u003c/h3\u003e\u003c/p\u003e\n\u003cp class=\"mb-4 text-muted-foreground leading-relaxed\"\u003eFacilita las actualizaciones optimistas: mostrar el resultado esperado de una acción inmediatamente mientras se espera la confirmación del servidor. Si la acción falla, el estado vuelve automáticamente al valor anterior.\u003c/p\u003e\u003cp class=\"mb-4 text-muted-foreground leading-relaxed\"\u003e\u003ch2 class=\"text-xl font-bold mt-8 mb-3 border-b border-border pb-2\"\u003eref como prop (adiós a forwardRef)\u003c/h2\u003e\u003c/p\u003e\u003cp class=\"mb-4 text-muted-foreground leading-relaxed\"\u003eUna de las fricciones más conocidas de React era \u003ccode class=\"bg-muted px-1.5 py-0.5 rounded text-sm font-mono text-primary\"\u003eforwardRef\u003c/code\u003e: el patrón verbal necesario para pasar refs a componentes funcionales. En React 19, \u003cstrong class=\"font-semibold text-foreground\"\u003eref es simplemente una prop más\u003c/strong\u003e. No se necesita \u003ccode class=\"bg-muted px-1.5 py-0.5 rounded text-sm font-mono text-primary\"\u003eforwardRef\u003c/code\u003e ni \u003ccode class=\"bg-muted px-1.5 py-0.5 rounded text-sm font-mono text-primary\"\u003euseImperativeHandle\u003c/code\u003e para casos simples.\u003c/p\u003e\u003cp class=\"mb-4 text-muted-foreground leading-relaxed\"\u003eLos componentes que todavía usan \u003ccode class=\"bg-muted px-1.5 py-0.5 rounded text-sm font-mono text-primary\"\u003eforwardRef\u003c/code\u003e siguen funcionando, pero el patrón nuevo es más limpio y fácil de entender.\u003c/p\u003e\u003cp class=\"mb-4 text-muted-foreground leading-relaxed\"\u003e\u003ch2 class=\"text-xl font-bold mt-8 mb-3 border-b border-border pb-2\"\u003eContext como Provider directamente\u003c/h2\u003e\u003c/p\u003e\u003cp class=\"mb-4 text-muted-foreground leading-relaxed\"\u003eOtro cambio de ergonomía: ya no hace falta escribir \u003ccode class=\"bg-muted px-1.5 py-0.5 rounded text-sm font-mono text-primary\"\u003e\u003cMiContexto.Provider value={...}\u003e\u003c/code\u003e. Ahora puedes usar \u003ccode class=\"bg-muted px-1.5 py-0.5 rounded text-sm font-mono text-primary\"\u003e\u003cMiContexto value={...}\u003e\u003c/code\u003e directamente. El patrón anterior sigue funcionando, pero quedará deprecado eventualmente.\u003c/p\u003e\u003cp class=\"mb-4 text-muted-foreground leading-relaxed\"\u003e\u003ch2 class=\"text-xl font-bold mt-8 mb-3 border-b border-border pb-2\"\u003eServer Components y Server Actions estables\u003c/h2\u003e\u003c/p\u003e\u003cp class=\"mb-4 text-muted-foreground leading-relaxed\"\u003eReact 19 estabiliza los \u003cstrong class=\"font-semibold text-foreground\"\u003eReact Server Components (RSC)\u003c/strong\u003e y los \u003cstrong class=\"font-semibold text-foreground\"\u003eServer Actions\u003c/strong\u003e, que estaban en uso en frameworks como Next.js pero con advertencias de \"experimental\".\u003c/p\u003e\u003cp class=\"mb-4 text-muted-foreground leading-relaxed\"\u003eLos Server Components permiten renderizar componentes en el servidor sin enviar JavaScript al cliente, reduciendo el bundle size. Los Server Actions permiten llamar funciones del servidor directamente desde componentes cliente sin escribir endpoints de API manualmente.\u003c/p\u003e\u003cp class=\"mb-4 text-muted-foreground leading-relaxed\"\u003eImportante: RSC no es parte de React en sí mismo — es una funcionalidad que los frameworks como Next.js implementan. React 19 establece la API oficial que estos frameworks deben seguir.\u003c/p\u003e\u003cp class=\"mb-4 text-muted-foreground leading-relaxed\"\u003e\u003ch2 class=\"text-xl font-bold mt-8 mb-3 border-b border-border pb-2\"\u003eEl hook use()\u003c/h2\u003e\u003c/p\u003e\u003cp class=\"mb-4 text-muted-foreground leading-relaxed\"\u003e\u003ccode class=\"bg-muted px-1.5 py-0.5 rounded text-sm font-mono text-primary\"\u003euse()\u003c/code\u003e es un nuevo hook que puede leer el valor de una promesa o un contexto dentro del render. A diferencia de otros hooks, puede usarse dentro de condicionales. Es especialmente útil con Suspense para mostrar estados de carga mientras se resuelven promesas.\u003c/p\u003e\u003cp class=\"mb-4 text-muted-foreground leading-relaxed\"\u003e\u003ch2 class=\"text-xl font-bold mt-8 mb-3 border-b border-border pb-2\"\u003eMetadatos de documento en componentes\u003c/h2\u003e\u003c/p\u003e\u003cp class=\"mb-4 text-muted-foreground leading-relaxed\"\u003eReact 19 permite usar tags de metadatos del documento (\u003ccode class=\"bg-muted px-1.5 py-0.5 rounded text-sm font-mono text-primary\"\u003e\u003ctitle\u003e\u003c/code\u003e, \u003ccode class=\"bg-muted px-1.5 py-0.5 rounded text-sm font-mono text-primary\"\u003e\u003cmeta\u003e\u003c/code\u003e, \u003ccode class=\"bg-muted px-1.5 py-0.5 rounded text-sm font-mono text-primary\"\u003e\u003clink\u003e\u003c/code\u003e) directamente dentro de componentes. React los mueve automáticamente al \u003ccode class=\"bg-muted px-1.5 py-0.5 rounded text-sm font-mono text-primary\"\u003e\u003chead\u003e\u003c/code\u003e del documento, sin necesidad de librerías como react-helmet.\u003c/p\u003e\u003cp class=\"mb-4 text-muted-foreground leading-relaxed\"\u003e\u003ch2 class=\"text-xl font-bold mt-8 mb-3 border-b border-border pb-2\"\u003eMejoras en la carga de recursos\u003c/h2\u003e\u003c/p\u003e\u003cp class=\"mb-4 text-muted-foreground leading-relaxed\"\u003eScripts, hojas de estilo y fuentes ahora pueden declararse en componentes y React garantiza que se carguen antes de que el componente se renderice. Esto reduce los saltos de contenido sin estilo (FOUC) y mejora el rendimiento percibido.\u003c/p\u003e\u003cp class=\"mb-4 text-muted-foreground leading-relaxed\"\u003e\u003ch2 class=\"text-xl font-bold mt-8 mb-3 border-b border-border pb-2\"\u003eCómo migrar desde React 18\u003c/h2\u003e\u003c/p\u003e\u003cp class=\"mb-4 text-muted-foreground leading-relaxed\"\u003eLa migración es relativamente sencilla para la mayoría de proyectos:\u003c/p\u003e\u003cp class=\"mb-4 text-muted-foreground leading-relaxed\"\u003e\u003col class=\"my-4 space-y-1 text-muted-foreground leading-relaxed\"\u003e\u003cli class=\"ml-6 list-decimal mb-1\"\u003eActualiza React y React DOM a la versión 19\u003c/li\u003e\u003c/p\u003e\n\u003cli class=\"ml-6 list-decimal mb-1\"\u003eEjecuta el codemods oficiales para actualizar imports deprecados\u003c/li\u003e\n\u003c/ol\u003e\u003cli class=\"ml-6 list-decimal mb-1\"\u003eBusca usos de \u003ccode class=\"bg-muted px-1.5 py-0.5 rounded text-sm font-mono text-primary\"\u003eforwardRef\u003c/code\u003e — puedes migrarlos progresivamente, no es urgente\u003c/li\u003e\n\u003col class=\"my-4 space-y-1 text-muted-foreground leading-relaxed\"\u003e\u003cli class=\"ml-6 list-decimal mb-1\"\u003eSi usas Server Components a través de Next.js, ya están en React 19 desde Next.js 15\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp class=\"mb-4 text-muted-foreground leading-relaxed\"\u003eEl equipo de React publicó una guía oficial de migración con todos los cambios breaking y sus soluciones. La mayoría de proyectos típicos no tiene cambios breaking significativos.\u003c/p\u003e\u003cp class=\"mb-4 text-muted-foreground leading-relaxed\"\u003e\u003ch2 class=\"text-xl font-bold mt-8 mb-3 border-b border-border pb-2\"\u003eConclusión\u003c/h2\u003e\u003c/p\u003e\u003cp class=\"mb-4 text-muted-foreground leading-relaxed\"\u003eReact 19 no reinventa el framework — lo refina. Los nuevos hooks resuelven patrones de formularios y estado asíncrono que toda aplicación real necesita. La eliminación de \u003ccode class=\"bg-muted px-1.5 py-0.5 rounded text-sm font-mono text-primary\"\u003eforwardRef\u003c/code\u003e y la simplificación del contexto reducen código boilerplate sin cambiar el modelo mental. Y la estabilización de RSC y Server Actions da a los desarrolladores y frameworks una base oficial sobre la que construir.\u003c/p\u003e\u003cp class=\"mb-4 text-muted-foreground leading-relaxed\"\u003eSi llevas tiempo posponiendo la actualización, React 19 es el momento.\u003c/p\u003e"])</script><script>self.__next_f.push([1,"16:[\"$\",\"div\",null,{\"className\":\"max-w-7xl mx-auto px-4 py-8\",\"children\":[[\"$\",\"script\",null,{\"type\":\"application/ld+json\",\"dangerouslySetInnerHTML\":{\"__html\":\"{\\\"@context\\\":\\\"https://schema.org\\\",\\\"@type\\\":\\\"NewsArticle\\\",\\\"headline\\\":\\\"React 19: todas las novedades y cómo migrar desde React 18\\\",\\\"description\\\":\\\"React 19 llegó como versión estable en diciembre de 2024 con nuevos hooks, Server Actions estables, ref como prop y mejoras sustanciales en el manejo de formularios y estado asíncrono.\\\",\\\"image\\\":[\\\"https://images.unsplash.com/photo-1633356122544-f134324a6cee?w=1200\u0026h=630\u0026fit=crop\\\"],\\\"datePublished\\\":\\\"2026-06-16T10:00:00+00:00\\\",\\\"dateModified\\\":\\\"2026-06-16T10:00:00+00:00\\\",\\\"author\\\":[{\\\"@type\\\":\\\"Person\\\",\\\"name\\\":\\\"Junior De Leon\\\",\\\"url\\\":\\\"https://tecpulse.tech/sobre-nosotros\\\"}],\\\"publisher\\\":{\\\"@type\\\":\\\"Organization\\\",\\\"name\\\":\\\"TechPulse\\\",\\\"url\\\":\\\"https://tecpulse.tech\\\",\\\"logo\\\":{\\\"@type\\\":\\\"ImageObject\\\",\\\"url\\\":\\\"https://tecpulse.tech/logo.svg\\\",\\\"width\\\":300,\\\"height\\\":60}},\\\"mainEntityOfPage\\\":{\\\"@type\\\":\\\"WebPage\\\",\\\"@id\\\":\\\"https://tecpulse.tech/software/react-19-novedades-como-migrar-desde-react-18\\\"},\\\"inLanguage\\\":\\\"es\\\"}\"}}],[\"$\",\"div\",null,{\"className\":\"grid grid-cols-1 lg:grid-cols-3 gap-8\",\"children\":[[\"$\",\"article\",null,{\"className\":\"lg:col-span-2\",\"children\":[[\"$\",\"header\",null,{\"className\":\"mb-6\",\"children\":[[\"$\",\"$L5\",null,{\"href\":\"/software\",\"children\":[\"$\",\"span\",null,{\"data-slot\":\"badge\",\"data-variant\":\"default\",\"className\":\"group/badge inline-flex h-5 w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-4xl border border-transparent px-2 py-0.5 text-xs font-medium whitespace-nowrap focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [\u0026\u003esvg]:pointer-events-none [\u0026\u003esvg]:size-3! bg-primary [a]:hover:bg-primary/80 mb-3 text-white hover:opacity-80 transition-opacity\",\"style\":{\"backgroundColor\":\"#8b5cf6\"},\"children\":[\"💻\",\" \",\"Software\"]}]}],[\"$\",\"h1\",null,{\"className\":\"text-2xl md:text-3xl font-bold leading-tight mb-4\",\"children\":\"React 19: todas las novedades y cómo migrar desde React 18\"}],[\"$\",\"p\",null,{\"className\":\"text-muted-foreground text-base mb-4\",\"children\":\"React 19 llegó como versión estable en diciembre de 2024 con nuevos hooks, Server Actions estables, ref como prop y mejoras sustanciales en el manejo de formularios y estado asíncrono.\"}],[\"$\",\"div\",null,{\"className\":\"flex flex-wrap items-center gap-4 text-sm text-muted-foreground\",\"children\":[[\"$\",\"span\",null,{\"className\":\"flex items-center gap-1.5\",\"children\":[[\"$\",\"$L4\",null,{\"ref\":\"$undefined\",\"iconNode\":[[\"path\",{\"d\":\"M8 2v4\",\"key\":\"1cmpym\"}],[\"path\",{\"d\":\"M16 2v4\",\"key\":\"4m81vk\"}],[\"rect\",{\"width\":\"18\",\"height\":\"18\",\"x\":\"3\",\"y\":\"4\",\"rx\":\"2\",\"key\":\"1hopcy\"}],[\"path\",{\"d\":\"M3 10h18\",\"key\":\"8toen8\"}]],\"className\":\"lucide-calendar w-4 h-4\"}],\"16 de junio de 2026\"]}],[\"$\",\"span\",null,{\"className\":\"flex items-center gap-1.5\",\"children\":[[\"$\",\"$L4\",null,{\"ref\":\"$undefined\",\"iconNode\":[[\"circle\",{\"cx\":\"12\",\"cy\":\"12\",\"r\":\"10\",\"key\":\"1mglay\"}],[\"path\",{\"d\":\"M12 6v6l4 2\",\"key\":\"mmk7yg\"}]],\"className\":\"lucide-clock w-4 h-4\"}],8,\" min de lectura\"]}],[\"$\",\"span\",null,{\"children\":[\"por \",[\"$\",\"strong\",null,{\"className\":\"text-foreground\",\"children\":\"Junior De Leon\"}]]}]]}]]}],[\"$\",\"div\",null,{\"className\":\"relative w-full aspect-[16/9] rounded-xl overflow-hidden mb-8\",\"children\":[\"$\",\"$L21\",null,{\"src\":\"https://images.unsplash.com/photo-1633356122544-f134324a6cee?w=1200\u0026h=630\u0026fit=crop\",\"alt\":\"React 19: todas las novedades y cómo migrar desde React 18\",\"fill\":true,\"sizes\":\"(max-width: 1024px) 100vw, 66vw\",\"className\":\"object-cover\",\"priority\":true}]}],[\"$\",\"div\",null,{\"className\":\"text-foreground leading-relaxed text-base md:text-lg\",\"dangerouslySetInnerHTML\":{\"__html\":\"$22\"}}],null,\"$L23\",\"$L24\",\"$L25\",\"$L26\",\"$L27\"]}],\"$L28\"]}]]}]\n"])</script><script>self.__next_f.push([1,"29:I[72436,[\"/_next/static/chunks/0bk72m4yhcskw.js\",\"/_next/static/chunks/14mrh2-p_w84d.js\",\"/_next/static/chunks/19eb1t15vtiwd.js\",\"/_next/static/chunks/1e2ai_wi0mlzp.js\",\"/_next/static/chunks/0znrmovmnm0z-.js\",\"/_next/static/chunks/3598y473kn56a.js\",\"/_next/static/chunks/3moed_z-23wnh.js\",\"/_next/static/chunks/20seezom9r1dk.js\",\"/_next/static/chunks/3yaarhby3n0j2.js\"],\"Separator\"]\n2a:I[41754,[\"/_next/static/chunks/0bk72m4yhcskw.js\",\"/_next/static/chunks/14mrh2-p_w84d.js\",\"/_next/static/chunks/19eb1t15vtiwd.js\",\"/_next/static/chunks/1e2ai_wi0mlzp.js\",\"/_next/static/chunks/0znrmovmnm0z-.js\",\"/_next/static/chunks/3598y473kn56a.js\",\"/_next/static/chunks/3moed_z-23wnh.js\",\"/_next/static/chunks/20seezom9r1dk.js\",\"/_next/static/chunks/3yaarhby3n0j2.js\"],\"default\"]\n2b:I[32795,[\"/_next/static/chunks/0bk72m4yhcskw.js\",\"/_next/static/chunks/14mrh2-p_w84d.js\",\"/_next/static/chunks/19eb1t15vtiwd.js\",\"/_next/static/chunks/1e2ai_wi0mlzp.js\",\"/_next/static/chunks/0znrmovmnm0z-.js\",\"/_next/static/chunks/3598y473kn56a.js\",\"/_next/static/chunks/3moed_z-23wnh.js\",\"/_next/static/chunks/20seezom9r1dk.js\",\"/_next/static/chunks/3yaarhby3n0j2.js\"],\"default\"]\n"])</script><script>self.__next_f.push([1,"23:[\"$\",\"div\",null,{\"className\":\"mt-6 flex items-center gap-2 flex-wrap\",\"children\":[[\"$\",\"$L4\",null,{\"ref\":\"$undefined\",\"iconNode\":[[\"path\",{\"d\":\"M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z\",\"key\":\"vktsd0\"}],[\"circle\",{\"cx\":\"7.5\",\"cy\":\"7.5\",\"r\":\".5\",\"fill\":\"currentColor\",\"key\":\"kqv944\"}]],\"className\":\"lucide-tag w-4 h-4 text-muted-foreground\"}],[[\"$\",\"span\",\"react\",{\"data-slot\":\"badge\",\"data-variant\":\"secondary\",\"className\":\"group/badge inline-flex h-5 w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-4xl border border-transparent px-2 py-0.5 font-medium whitespace-nowrap transition-all focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [\u0026\u003esvg]:pointer-events-none [\u0026\u003esvg]:size-3! bg-secondary text-secondary-foreground [a]:hover:bg-secondary/80 text-xs\",\"children\":\"react\"}],[\"$\",\"span\",\"javascript\",{\"data-slot\":\"badge\",\"data-variant\":\"secondary\",\"className\":\"group/badge inline-flex h-5 w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-4xl border border-transparent px-2 py-0.5 font-medium whitespace-nowrap transition-all focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [\u0026\u003esvg]:pointer-events-none [\u0026\u003esvg]:size-3! bg-secondary text-secondary-foreground [a]:hover:bg-secondary/80 text-xs\",\"children\":\"javascript\"}],[\"$\",\"span\",\"frontend\",{\"data-slot\":\"badge\",\"data-variant\":\"secondary\",\"className\":\"group/badge inline-flex h-5 w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-4xl border border-transparent px-2 py-0.5 font-medium whitespace-nowrap transition-all focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [\u0026\u003esvg]:pointer-events-none [\u0026\u003esvg]:size-3! bg-secondary text-secondary-foreground [a]:hover:bg-secondary/80 text-xs\",\"children\":\"frontend\"}],[\"$\",\"span\",\"desarrollo\",{\"data-slot\":\"badge\",\"data-variant\":\"secondary\",\"className\":\"group/badge inline-flex h-5 w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-4xl border border-transparent px-2 py-0.5 font-medium whitespace-nowrap transition-all focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [\u0026\u003esvg]:pointer-events-none [\u0026\u003esvg]:size-3! bg-secondary text-secondary-foreground [a]:hover:bg-secondary/80 text-xs\",\"children\":\"desarrollo\"}],[\"$\",\"span\",\"react19\",{\"data-slot\":\"badge\",\"data-variant\":\"secondary\",\"className\":\"group/badge inline-flex h-5 w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-4xl border border-transparent px-2 py-0.5 font-medium whitespace-nowrap transition-all focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [\u0026\u003esvg]:pointer-events-none [\u0026\u003esvg]:size-3! bg-secondary text-secondary-foreground [a]:hover:bg-secondary/80 text-xs\",\"children\":\"react19\"}]]]}]\n"])</script><script>self.__next_f.push([1,"24:[\"$\",\"$L29\",null,{\"className\":\"my-8\"}]\n25:[\"$\",\"div\",null,{\"className\":\"flex items-start gap-4 p-4 bg-muted/30 rounded-xl\",\"children\":[[\"$\",\"div\",null,{\"className\":\"w-12 h-12 rounded-full bg-primary/10 flex items-center justify-center text-primary font-bold text-lg shrink-0\",\"children\":\"J\"}],[\"$\",\"div\",null,{\"children\":[[\"$\",\"p\",null,{\"className\":\"font-semibold\",\"children\":\"Junior De Leon\"}],[\"$\",\"p\",null,{\"className\":\"text-sm text-muted-foreground mt-0.5\",\"children\":\"Editor principal de TechPulse.\"}]]}]]}]\n26:[\"$\",\"$L2a\",null,{\"slot\":\"2233445566\",\"format\":\"horizontal\",\"className\":\"mt-8\"}]\n27:[\"$\",\"$L2b\",null,{\"articuloId\":\"f761c89c-dcf9-40da-8681-c1e312c97d2c\",\"comentariosIniciales\":[]}]\n"])</script><script>self.__next_f.push([1,"28:[\"$\",\"aside\",null,{\"className\":\"space-y-6\",\"children\":[[\"$\",\"$L2a\",null,{\"slot\":\"3344556677\",\"format\":\"rectangle\"}],[\"$\",\"div\",null,{\"children\":[[\"$\",\"h3\",null,{\"className\":\"font-bold text-sm uppercase tracking-wide mb-4\",\"children\":\"Artículos relacionados\"}],[\"$\",\"div\",null,{\"className\":\"space-y-3\",\"children\":[[\"$\",\"$L5\",\"77e05435-3a47-4c6a-9626-ee610d3a06e1\",{\"href\":\"/software/como-cambio-busqueda-google-ia-agentic-search-2026\",\"children\":[\"$\",\"div\",null,{\"data-slot\":\"card\",\"data-size\":\"default\",\"className\":\"group/card flex-col overflow-hidden rounded-xl bg-card text-sm text-card-foreground ring-1 ring-foreground/10 [--card-spacing:--spacing(4)] has-data-[slot=card-footer]:pb-0 has-[\u003eimg:first-child]:pt-0 data-[size=sm]:[--card-spacing:--spacing(3)] data-[size=sm]:has-data-[slot=card-footer]:pb-0 *:[img:first-child]:rounded-t-xl *:[img:last-child]:rounded-b-xl flex gap-3 p-3 hover:bg-muted/50 transition-colors border-0 shadow-none\",\"children\":[[\"$\",\"div\",null,{\"className\":\"relative w-24 h-16 shrink-0 rounded-md overflow-hidden\",\"children\":[\"$\",\"$L21\",null,{\"src\":\"https://images.unsplash.com/photo-1499951360447-b19be8fe80f5?w=1200\u0026q=80\",\"alt\":\"Por qué tus búsquedas en Google ya no muestran una lista de enlaces: así cambió el buscador con la IA en 2026\",\"fill\":true,\"sizes\":\"96px\",\"className\":\"object-cover\"}]}],[\"$\",\"div\",null,{\"data-slot\":\"card-content\",\"className\":\"p-0 flex flex-col justify-between flex-1\",\"children\":[[\"$\",\"p\",null,{\"className\":\"text-sm font-medium line-clamp-2 leading-snug\",\"children\":\"Por qué tus búsquedas en Google ya no muestran una lista de enlaces: así cambió el buscador con la IA en 2026\"}],[\"$\",\"span\",null,{\"className\":\"text-xs text-muted-foreground\",\"children\":\"hace 2 días\"}]]}]]}]}],[\"$\",\"$L5\",\"5481b8c5-73d2-4413-89c2-288f416efb53\",{\"href\":\"/software/india-bloquea-telegram-examen-neet-fraude-2026\",\"children\":[\"$\",\"div\",null,{\"data-slot\":\"card\",\"data-size\":\"default\",\"className\":\"group/card flex-col overflow-hidden rounded-xl bg-card text-sm text-card-foreground ring-1 ring-foreground/10 [--card-spacing:--spacing(4)] has-data-[slot=card-footer]:pb-0 has-[\u003eimg:first-child]:pt-0 data-[size=sm]:[--card-spacing:--spacing(3)] data-[size=sm]:has-data-[slot=card-footer]:pb-0 *:[img:first-child]:rounded-t-xl *:[img:last-child]:rounded-b-xl flex gap-3 p-3 hover:bg-muted/50 transition-colors border-0 shadow-none\",\"children\":[[\"$\",\"div\",null,{\"className\":\"relative w-24 h-16 shrink-0 rounded-md overflow-hidden\",\"children\":[\"$\",\"$L21\",null,{\"src\":\"https://images.unsplash.com/photo-1432888622747-4eb9a8efeb07?w=1200\u0026q=80\",\"alt\":\"India bloquea Telegram para 150 millones de usuarios por fraude en un examen médico\",\"fill\":true,\"sizes\":\"96px\",\"className\":\"object-cover\"}]}],[\"$\",\"div\",null,{\"data-slot\":\"card-content\",\"className\":\"p-0 flex flex-col justify-between flex-1\",\"children\":[[\"$\",\"p\",null,{\"className\":\"text-sm font-medium line-clamp-2 leading-snug\",\"children\":\"India bloquea Telegram para 150 millones de usuarios por fraude en un examen médico\"}],[\"$\",\"span\",null,{\"className\":\"text-xs text-muted-foreground\",\"children\":\"hace 3 días\"}]]}]]}]}],[\"$\",\"$L5\",\"a4dad4a2-0f82-467d-85db-9dee0f15df45\",{\"href\":\"/software/meta-edits-escritorio-ia-editor-video-capcut-2026\",\"children\":[\"$\",\"div\",null,{\"data-slot\":\"card\",\"data-size\":\"default\",\"className\":\"group/card flex-col overflow-hidden rounded-xl bg-card text-sm text-card-foreground ring-1 ring-foreground/10 [--card-spacing:--spacing(4)] has-data-[slot=card-footer]:pb-0 has-[\u003eimg:first-child]:pt-0 data-[size=sm]:[--card-spacing:--spacing(3)] data-[size=sm]:has-data-[slot=card-footer]:pb-0 *:[img:first-child]:rounded-t-xl *:[img:last-child]:rounded-b-xl flex gap-3 p-3 hover:bg-muted/50 transition-colors border-0 shadow-none\",\"children\":[\"$L2c\",\"$L2d\"]}]}]]}]]}]]}]\n"])</script><script>self.__next_f.push([1,"2c:[\"$\",\"div\",null,{\"className\":\"relative w-24 h-16 shrink-0 rounded-md overflow-hidden\",\"children\":[\"$\",\"$L21\",null,{\"src\":\"https://images.unsplash.com/photo-1517694712202-14dd9538aa97?w=1200\u0026q=80\",\"alt\":\"Meta lanza Edits para escritorio con IA integrada y le declara la guerra a CapCut\",\"fill\":true,\"sizes\":\"96px\",\"className\":\"object-cover\"}]}]\n2d:[\"$\",\"div\",null,{\"data-slot\":\"card-content\",\"className\":\"p-0 flex flex-col justify-between flex-1\",\"children\":[[\"$\",\"p\",null,{\"className\":\"text-sm font-medium line-clamp-2 leading-snug\",\"children\":\"Meta lanza Edits para escritorio con IA integrada y le declara la guerra a CapCut\"}],[\"$\",\"span\",null,{\"className\":\"text-xs text-muted-foreground\",\"children\":\"hace 4 días\"}]]}]\n"])</script></body></html>