React Academy · Lección

Consumir streams SSE en React con EventSource

Conecte con un endpoint SSE mediante EventSource en useEffect y muestre datos en streaming en tiempo real.

Lección 2 de 413 pasos

Consumir streams SSE en React con EventSource es una lección gratuita de React Academy en CoddyKit. Esta es la lección 2 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de React Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de React Academy incluye 4 lecciones en total.

Creación de una conexión EventSource

new EventSource(url) crea una conexión SSE con la URL especificada. El navegador abre inmediatamente una solicitud HTTP GET con la cabecera Accept: text/event-stream. El servidor mantiene abierta esta conexión y transmite eventos. EventSource es una API nativa del navegador; para el uso básico no se necesita ninguna biblioteca.

Estados del ciclo de vida de la conexión

EventSource tiene tres estados de disponibilidad: 0 (CONNECTING): se está estableciendo o restableciendo la conexión; 1 (OPEN): la conexión está establecida y los eventos están fluyendo; 2 (CLOSED): la conexión está cerrada y no volverá a conectarse. Compruebe eventSource.readyState para determinar el estado actual.

onmessage para eventos genéricos

El controlador eventSource.onmessage se activa para los eventos del servidor que no tienen un tipo de evento explícito (el servidor envía data: ... sin un campo event:). El controlador recibe un objeto de evento cuyo event.data es el contenido en forma de cadena. Normalmente, el servidor aplica JSON.stringify a los datos para que pueda aplicarles JSON.parse al recibirlos.

Eventos personalizados con nombre

El servidor puede enviar eventos con nombre: event: userJoined\ndata: {"userId": "123"}\n\n. En el navegador, escúchelos con eventSource.addEventListener('userJoined', handler). Esto permite multiplexar varios tipos de eventos en una sola conexión SSE; cada tipo de evento tiene su propio controlador, lo que mantiene el código limpio y organizado.

Análisis de event.data

Los datos SSE llegan como cadenas. Para los datos estructurados, el servidor envía JSON.stringify(payload) y el cliente los analiza: const data = JSON.parse(event.data). Rodee siempre JSON.parse con try/catch para gestionar correctamente el JSON mal formado del servidor, registrar el error y omitir el evento defectuoso.

useEffect para el ciclo de vida de EventSource

Cree y cierre EventSource dentro de un useEffect: cree la conexión cuando el componente se monte, asigne los controladores de eventos y devuelva una función de limpieza que llame a eventSource.close(). Sin la limpieza, la conexión queda abierta cuando el componente se desmonta, el usuario cambia de página o el efecto vuelve a ejecutarse con dependencias diferentes.

Actualización del estado al recibir un mensaje

Dentro del controlador eventSource.onmessage, actualice el estado de React para reflejar los datos nuevos: setMessages(prev => [...prev, JSON.parse(event.data)]). Use la forma funcional de setState para evitar problemas con cierres obsoletos: el controlador de eventos captura el valor inicial del estado y la actualización funcional garantiza que siempre se actualice a partir del estado más reciente.

Reconexión automática

EventSource se reconecta automáticamente cuando la conexión se pierde debido a un error de red o al reinicio del servidor. El navegador espera un breve intervalo (normalmente 3 segundos, configurable por el servidor mediante retry: 3000 en el flujo) y luego se reconecta. No necesita implementar la lógica de reconexión: ya está integrada en la API de EventSource.

Encabezado Last-Event-ID

EventSource realiza un seguimiento del ID del último evento recibido (establecido por el servidor mediante id: 123 en el flujo). Al reconectarse, el navegador envía automáticamente este ID en el encabezado HTTP Last-Event-ID. Un servidor bien diseñado utiliza este ID para reproducir los eventos omitidos y garantizar que no se pierda ninguno durante una reconexión.

Envío de credenciales y encabezados

EventSource no admite encabezados personalizados directamente. Para la autenticación, utilice cookies (new EventSource(url, { withCredentials: true }) envía las cookies) o incluya el token de autenticación como parámetro de consulta de la URL. Si necesita encabezados Authorization, utilice la API Fetch con ReadableStream en lugar de EventSource para procesar manualmente la respuesta SSE.

Gestión de errores de conexión

Cuando EventSource encuentra un error, se ejecuta el controlador onerror. El valor de readyState será CONNECTING (si se volverá a intentar) o CLOSED (si no). En onerror, compruebe readyState para distinguir entre un error de red temporal (se reintentará automáticamente) y un fallo permanente (el servidor devolvió un estado distinto de 200). En caso de errores permanentes, cierre la conexión y notifique al usuario.

Reconexión automática de EventSource

¿Qué ocurre cuando una conexión de EventSource se interrumpe debido a un error de red?

Resumen de la lección: EventSource en React

new EventSource(url) crea una conexión SSE con readyStates: CONNECTING, OPEN, CLOSED. onmessage gestiona eventos genéricos; addEventListener gestiona tipos de eventos con nombre. JSON.parse(event.data) extrae datos estructurados. Cree y libere EventSource en useEffect. La reconexión automática está integrada: EventSource reintenta después de errores de red y utiliza Last-Event-ID para reproducir eventos omitidos. Autentíquese mediante cookies (withCredentials) o parámetros de consulta de la URL.

Gratis para empezar

Aprende React con un tutor de IA — gratis

Escribe y ejecuta código real en tu navegador, obtén ayuda instantánea de un tutor de IA disponible 24/7 y continúa donde lo dejaste en la web o en la aplicación.

Cursos
88
Lecciones
324

Preguntas frecuentes

¿La lección «Consumir streams SSE en React con EventSource» es gratis?

Sí — el texto completo de «Consumir streams SSE en React con EventSource» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de React Academy, actualiza a CoddyKit PRO. El curso de React Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Consumir streams SSE en React con EventSource»?

Conecte con un endpoint SSE mediante EventSource en useEffect y muestre datos en streaming en tiempo real. Practicas React Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar React Academy?

No se requiere experiencia previa. React Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 2 de 4.

¿Cuánto tiempo toma la lección «Consumir streams SSE en React con EventSource»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de React Academy?

Sí. Cada lección de React Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Comparación entre SSE, WebSockets y polling
  2. Consumir streams SSE en React con EventSource
  3. Patrón de long polling y lógica de reconexión
  4. Creación de un feed de notificaciones en tiempo real
← Volver a React Academy