Consumare stream SSE in React con EventSource
Si colleghi a un endpoint SSE con EventSource in useEffect e visualizzi i dati trasmessi in streaming in tempo reale.
Consumare stream SSE in React con EventSource è una lezione React Academy gratuita su CoddyKit. Questa è la lezione 2 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento React Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso React Academy include 4 lezioni in totale.
Creazione di una connessione EventSource
new EventSource(url) crea una connessione SSE all'URL specificato. Il browser apre immediatamente una richiesta HTTP GET con l'intestazione Accept: text/event-stream. Il server mantiene aperta questa connessione e trasmette gli eventi. EventSource è un'API nativa del browser: per l'utilizzo di base non è necessaria alcuna libreria.
Stati del ciclo di vita della connessione
EventSource ha tre stati di disponibilità: 0 (CONNECTING): la connessione è in fase di stabilimento o ristabilimento; 1 (OPEN): la connessione è stabilita e gli eventi vengono trasmessi; 2 (CLOSED): la connessione è chiusa e non verrà ristabilita. Verifichi eventSource.readyState per determinare lo stato corrente.
onmessage per gli eventi generici
Il gestore eventSource.onmessage viene eseguito per gli eventi del server che non hanno un tipo esplicito, ovvero quando il server invia data: ... senza un campo event:. Il gestore riceve un oggetto evento in cui event.data contiene il payload sotto forma di stringa. In genere il server applica JSON.stringify ai dati, che vengono poi elaborati con JSON.parse al momento della ricezione.
Eventi personalizzati con nome
Il server può inviare eventi con nome: event: userJoined
data: {"userId": "123"}
. Nel browser, ascolti l'evento con eventSource.addEventListener('userJoined', handler). Questo consente di multiplexare più tipi di evento su un'unica connessione SSE: ogni tipo di evento ha il proprio gestore, rendendo il codice chiaro e organizzato.
Analisi di event.data
I dati SSE arrivano sotto forma di stringhe. Per i dati strutturati, il server invia JSON.stringify(payload) e il client li analizza con const data = JSON.parse(event.data). Racchiuda sempre JSON.parse in try/catch per gestire in modo appropriato il JSON non valido inviato dal server, registrando l'errore e ignorando l'evento malformato.
useEffect per il ciclo di vita di EventSource
Crei e chiuda EventSource all'interno di un useEffect: crei la connessione quando il componente viene montato, colleghi i gestori degli eventi e restituisca una funzione di pulizia che chiama eventSource.close(). Senza questa pulizia, la connessione rimane attiva quando il componente viene smontato, l'utente cambia pagina o l'effetto viene eseguito di nuovo con dipendenze diverse.
Aggiornamento dello stato alla ricezione di un messaggio
Nel gestore eventSource.onmessage, aggiorni lo stato React per riflettere i nuovi dati: setMessages(prev => [...prev, JSON.parse(event.data)]). Utilizzi la forma funzionale di setState per evitare problemi dovuti a una closure obsoleta: il gestore degli eventi cattura il valore iniziale dello stato, mentre l'aggiornamento funzionale garantisce di lavorare sempre sullo stato più recente.
Riconnessione automatica
EventSource si riconnette automaticamente quando la connessione viene persa a causa di un errore di rete o del riavvio del server. Il browser attende un breve intervallo (in genere 3 secondi, configurabile dal server tramite retry: 3000 nello stream), quindi si riconnette. Non è necessario implementare la logica di riconnessione: è integrata nell'API EventSource.
L'intestazione Last-Event-ID
EventSource tiene traccia dell'ultimo ID evento ricevuto (impostato dal server tramite id: 123 nello stream). Durante la riconnessione, il browser invia automaticamente questo ID nell'intestazione HTTP Last-Event-ID. Un server ben progettato utilizza questo ID per riprodurre gli eventi persi, assicurando che nessun evento venga perso durante una riconnessione.
Passaggio di credenziali e intestazioni
EventSource non supporta direttamente le intestazioni personalizzate. Per l'autenticazione, utilizzi i cookie (new EventSource(url, { withCredentials: true }) invia i cookie) oppure includa il token di autenticazione come parametro di query nell'URL. Se sono necessarie intestazioni Authorization, utilizzi la Fetch API con ReadableStream invece di EventSource per elaborare manualmente la risposta SSE.
Gestione degli errori di connessione
Quando EventSource rileva un errore, viene attivato il gestore onerror. Il valore di readyState sarà CONNECTING (se verrà effettuato un nuovo tentativo) oppure CLOSED (in caso contrario). In onerror, controlli readyState per distinguere tra un errore di rete temporaneo (per il quale verrà effettuato automaticamente un nuovo tentativo) e un errore permanente (il server ha restituito uno stato diverso da 200). In caso di errore permanente, chiuda la connessione e informi l'utente.
Riconnessione automatica di EventSource
Che cosa accade quando una connessione EventSource viene interrotta a causa di un errore di rete?
Riepilogo della lezione: EventSource in React
new EventSource(url) crea una connessione SSE con gli stati readyStates: CONNECTING, OPEN, CLOSED. onmessage gestisce gli eventi generici; addEventListener gestisce i tipi di evento con nome. JSON.parse(event.data) estrae i dati strutturati. Crei e chiuda EventSource in useEffect. La riconnessione automatica è integrata: EventSource effettua nuovi tentativi dopo gli errori di rete utilizzando Last-Event-ID per riprodurre gli eventi persi. Per l'autenticazione, utilizzi i cookie (withCredentials) o i parametri di query nell'URL.
Domande Frequenti
La lezione «Consumare stream SSE in React con EventSource» è gratuita?
Sì — il testo completo di «Consumare stream SSE in React con EventSource» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso React Academy, passa a CoddyKit PRO. Il corso React Academy include 4 lezioni in totale.
Cosa imparerò in «Consumare stream SSE in React con EventSource»?
Si colleghi a un endpoint SSE con EventSource in useEffect e visualizzi i dati trasmessi in streaming in tempo reale. Eserciti React Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare React Academy?
Non è richiesta alcuna esperienza precedente. React Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 2 di 4.
Quanto tempo richiede la lezione «Consumare stream SSE in React con EventSource»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione React Academy?
Sì. Ogni lezione React Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Confronto tra SSE, WebSocket e polling
- Consumare stream SSE in React con EventSource
- Pattern di Long Polling e logica di riconnessione
- Creazione di un feed di notifiche in tempo reale