React Academy · Lektion

Använda SSE-strömmar i React med EventSource

Anslut till en SSE-slutpunkt med EventSource i useEffect och visa strömmande data i realtid.

Lektion 2 av 413 steg

Använda SSE-strömmar i React med EventSource är en gratis lektion i React Academy på CoddyKit. Detta är lektion 2 av 4. Ni kan läsa hela lektionen gratis nedan och sedan öva praktiskt i webbläsaren med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt. Den ingår i lärvägen för React Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i React Academy innehåller totalt 4 lektioner.

Skapa en EventSource-anslutning

new EventSource(url) skapar en SSE-anslutning till den angivna URL:en. Webbläsaren öppnar omedelbart en HTTP GET-begäran med headern Accept: text/event-stream. Servern håller anslutningen öppen och strömmar händelser. EventSource är ett webbläsarinbyggt API – inget bibliotek krävs för grundläggande användning.

Tillstånd under anslutningens livscykel

EventSource har tre tillstånd: 0 (CONNECTING) – anslutningen håller på att upprättas eller återupprättas, 1 (OPEN) – anslutningen är upprättad och händelser strömmar, 2 (CLOSED) – anslutningen är stängd och kommer inte att återansluta. Kontrollera eventSource.readyState för att fastställa det aktuella tillståndet.

onmessage för generiska händelser

Händelsehanteraren eventSource.onmessage körs för serverhändelser som inte har någon uttrycklig händelsetyp (servern skickar data: ... utan ett event:-fält). Hanteraren tar emot ett händelseobjekt där event.data är nyttolasten som en sträng. Servern serialiserar vanligtvis data med JSON.stringify, så att ni kan tolka den med JSON.parse när den tas emot.

Namngivna anpassade händelser

Servern kan skicka namngivna händelser: event: userJoined data: {"userId": "123"} . I webbläsaren lyssnar ni med eventSource.addEventListener('userJoined', handler). På så sätt kan flera händelsetyper multiplexas över en enda SSE-anslutning – varje händelsetyp får sin egen hanterare, vilket gör koden tydlig och välorganiserad.

Tolka event.data

SSE-data anländer som strängar. För strukturerade data skickar servern JSON.stringify(payload), och klienten tolkar dem: const data = JSON.parse(event.data). Omslut alltid JSON.parse med try/catch så att felaktig JSON från servern hanteras på ett bra sätt genom att felet loggas och den felaktiga händelsen hoppas över.

useEffect för EventSource-livscykeln

Skapa och stäng EventSource inuti useEffect: skapa anslutningen när komponenten monteras, koppla in händelsehanterarna och returnera en rensningsfunktion som anropar eventSource.close(). Utan rensningen läcker anslutningen när komponenten avmonteras, när användaren navigerar bort eller när effekten körs igen med andra beroenden.

Uppdatera tillståndet vid meddelanden

Uppdatera React-tillståndet i händelsehanteraren eventSource.onmessage så att det återspeglar nya data: setMessages(prev => [...prev, JSON.parse(event.data)]). Använd den funktionella formen av setState för att undvika problem med inaktuella closures – händelsehanteraren fångar det ursprungliga tillståndsvärdet, medan den funktionella uppdateringen ser till att ni alltid uppdaterar det senaste tillståndet.

Automatisk återanslutning

EventSource återansluter automatiskt när anslutningen bryts på grund av ett nätverksfel eller en omstart av servern. Webbläsaren väntar en kort stund (vanligtvis 3 sekunder, konfigurerbart av servern via retry: 3000 i strömmen) och ansluter sedan igen. Du behöver inte implementera någon återanslutningslogik – den är inbyggd i EventSource API.

Last-Event-ID-headern

EventSource håller reda på ID:t för den senast mottagna händelsen (som servern anger med id: 123 i strömmen). Vid återanslutning skickar webbläsaren automatiskt detta ID i HTTP-headern Last-Event-ID. En välutformad server använder detta för att spela upp missade händelser igen, så att inga händelser går förlorade under en återanslutning.

Skicka autentiseringsuppgifter och headers

EventSource har inte direkt stöd för anpassade headers. För autentisering kan Du använda cookies (new EventSource(url, { withCredentials: true }) skickar cookies) eller inkludera autentiseringstoken som en URL-frågeparameter. Om Du behöver Authorization-headers kan Du använda Fetch API med ReadableStream i stället för EventSource för att bearbeta SSE-svaret manuellt.

Hantera anslutningsfel

När EventSource stöter på ett fel körs handlern onerror. readyState blir CONNECTING (om ett nytt försök kommer att göras) eller CLOSED (om inte). I onerror kontrollerar Du readyState för att skilja ett tillfälligt nätverksfel (som försöks igen automatiskt) från ett permanent fel (servern returnerade en statuskod som inte är 200). Vid permanenta fel stänger Du anslutningen och meddelar användaren.

Automatisk återanslutning med EventSource

Vad händer när en EventSource-anslutning bryts på grund av ett nätverksfel?

Lektionens sammanfattning: EventSource i React

new EventSource(url) skapar en SSE-anslutning med readyStates: CONNECTING, OPEN, CLOSED. onmessage hanterar generiska händelser; addEventListener hanterar namngivna händelsetyper. JSON.parse(event.data) extraherar strukturerade data. Skapa och städa bort EventSource i useEffect. Automatisk återanslutning är inbyggd – EventSource försöker igen efter nätverksfel och använder Last-Event-ID för att spela upp missade händelser igen. Autentisera via cookies (withCredentials) eller URL-frågeparametrar.

Gratis att börja

Lär dig React med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
88
Lektioner
324

Vanliga frågor

Är lektionen ”Använda SSE-strömmar i React med EventSource” gratis?

Ja – hela texten till ”Använda SSE-strömmar i React med EventSource” kan läsas gratis här på webben. Om Ni vill öva interaktivt med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt och låsa upp resten av kursen i React Academy, kan Ni uppgradera till CoddyKit PRO. Kursen i React Academy innehåller totalt 4 lektioner.

Vad lär jag mig i ”Använda SSE-strömmar i React med EventSource”?

Anslut till en SSE-slutpunkt med EventSource i useEffect och visa strömmande data i realtid. Ni övar på React Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig React Academy?

Du behöver inga förkunskaper. Utbildningen i React Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 2 av 4.

Hur lång tid tar lektionen ”Använda SSE-strömmar i React med EventSource”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här React Academy-lektionen?

Ja. Varje React Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. Jämförelse mellan SSE, WebSockets och polling
  2. Använda SSE-strömmar i React med EventSource
  3. Mönstret long polling och återanslutningslogik
  4. Bygg ett realtidsflöde för aviseringar
← Tillbaka till React Academy