Inicio

React Router v7 — Tu Chat Full-Stack

Capítulo 4: React Router v7 — Tu Chat Full-Stack

Ya entiendes el streaming. Viste cada text-delta, cada finish-step, cada byte viajando por el wire.

Ahora veamos cuánto código desaparece cuando usas un framework full-stack.

El mismo chat, menos código

Así se ve el endpoint de chat en Hono:

Así se ve en React Router v7:

Sin Hono(). Sin serve(). Sin configurar puerto. React Router v7 maneja todo eso por ti.

El endpoint como action

En React Router v7, cada archivo en app/routes/ puede exportar un action. Cuando haces POST a esa ruta, se ejecuta el action.

Registra la ruta en routes.ts:

Listo. POST a /api/chat ejecuta tu action y retorna el stream.

Lo que React Router v7 hace por ti

Headers correctos

toUIMessageStreamResponse() configura automáticamente:

  • Content-Type: text/plain; charset=utf-8
  • x-vercel-ai-ui-message-stream: v1
  • Cache-Control: no-cache
  • Transfer-Encoding: chunked

No tienes que pensar en esto.

Type safety con Route types

El tipo Route.ActionArgs viene generado automáticamente. TypeScript sabe exactamente qué propiedades tiene request.

Hot reload

Cambias el código, el servidor se recarga. Sin reiniciar manualmente.

Deploy integrado

Un fly deploy y tu app está en producción. El mismo código corre en desarrollo y producción.

useChat apuntando a tu action

En el cliente, useChat se conecta al action mediante transport:

Nota AI SDK v6: El hook usa transport con DefaultChatTransport para configurar el endpoint. Usamos useState de React para el input, y sendMessage({ text }) para enviar. Los mensajes tienen parts en lugar de content.

Si tu endpoint es exactamente /api/chat (el default), puedes omitir transport completamente:

Callbacks en el servidor RRv7

Los callbacks funcionan igual que en Hono:

Mismo código que en Hono. El AI SDK no cambia—solo cambia el framework que lo envuelve.

Datos custom en RRv7

createUIMessageStream también funciona igual:

El cliente recibe los datos en message.parts exactamente igual.

Un chat completo en RRv7

Aquí está el ejemplo completo con contexto dinámico, callbacks, y persistencia:

Y el cliente:

Cuándo elegir cada uno

EscenarioUsa
API standalone para múltiples clientesHono
Microservicio de IA en el edgeHono
App full-stack con ReactReact Router v7
Debugging profundo del protocoloHono
Máxima productividadReact Router v7
Deploy a Cloudflare WorkersHono
Ya tienes una app RRv7React Router v7

No es una competencia. Son herramientas para diferentes contextos.

En una frase

  • RRv7: El framework hace el trabajo sucio. Tú escribes la lógica.
  • El conocimiento de Hono no fue en vano: Cuando algo falle, sabrás dónde buscar.
  • Mismo AI SDK, diferente envoltorio: Los callbacks, el protocolo, todo funciona igual.

Hasta ahora el modelo solo genera texto plano. En el próximo capítulo veremos cómo obtener datos estructurados: objetos tipados que tu código puede consumir directamente, sin parsear strings.

¿Ya compraste el libro?

Si compraste el libro y no encuentras tu email de descarga, ingresa tu email y te enviamos un nuevo enlace.