React Academy · Les

SSE-streams in React gebruiken met EventSource

Maak met EventSource in useEffect verbinding met een SSE-endpoint en geef streaminggegevens in realtime weer.

Les 2 van 413 stappen

SSE-streams in React gebruiken met EventSource is een gratis React Academy-les op CoddyKit. Dit is les 2 van 4. Je kunt de volledige les hieronder gratis lezen en daarna in de browser praktisch oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject React Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus React Academy bevat in totaal 4 lessen.

Een EventSource-verbinding maken

new EventSource(url) maakt een SSE-verbinding met de opgegeven URL. De browser opent onmiddellijk een HTTP GET-verzoek met de header Accept: text/event-stream. De server houdt deze verbinding open en streamt gebeurtenissen. EventSource is een ingebouwde browser-API — voor basisgebruik is geen bibliotheek nodig.

Statussen in de levenscyclus van een verbinding

EventSource heeft drie gereedheidsstatussen: 0 (CONNECTING) — de verbinding wordt tot stand gebracht of opnieuw tot stand gebracht, 1 (OPEN) — de verbinding is tot stand gebracht en gebeurtenissen stromen binnen, 2 (CLOSED) — de verbinding is gesloten en zal niet opnieuw worden verbonden. Controleer eventSource.readyState om de huidige status te bepalen.

onmessage voor algemene gebeurtenissen

De handler eventSource.onmessage wordt aangeroepen voor servergebeurtenissen zonder expliciet gebeurtenistype (de server verstuurt data: ... zonder een veld event:). De handler ontvangt een gebeurtenisobject waarin event.data de lading als tekenreeks bevat. De server gebruikt doorgaans JSON.stringify om de gegevens te serialiseren, zodat je ze bij ontvangst met JSON.parse kunt verwerken.

Benoemde aangepaste gebeurtenissen

De server kan benoemde gebeurtenissen versturen: event: userJoined data: {"userId": "123"} . Luister in de browser met eventSource.addEventListener('userJoined', handler). Zo kun je meerdere gebeurtenistypen over één SSE-verbinding verdelen — elk gebeurtenistype heeft een eigen handler, waardoor de code overzichtelijk en goed georganiseerd blijft.

event.data parseren

SSE-gegevens komen binnen als tekenreeksen. Voor gestructureerde gegevens verstuurt de server JSON.stringify(payload) en parseert de client deze: const data = JSON.parse(event.data). Plaats JSON.parse altijd in try/catch om ongeldige JSON van de server netjes af te handelen, de fout te registreren en de ongeldige gebeurtenis over te slaan.

useEffect voor de levenscyclus van EventSource

Maak EventSource aan en sluit het binnen een useEffect: maak de verbinding wanneer de component wordt geladen, stel de gebeurtenisafhandelaars in en retourneer een opruimfunctie die eventSource.close() aanroept. Zonder deze opruimactie blijft de verbinding bestaan wanneer de component wordt verwijderd, de gebruiker weg navigeert of het effect opnieuw wordt uitgevoerd met andere afhankelijkheden.

Status bijwerken bij een bericht

Werk binnen de handler eventSource.onmessage de React-status bij om nieuwe gegevens weer te geven: setMessages(prev => [...prev, JSON.parse(event.data)]). Gebruik de functionele vorm van setState om problemen met verouderde closures te voorkomen — de gebeurtenisafhandelaar legt de oorspronkelijke statuswaarde vast en de functionele update zorgt ervoor dat je altijd de meest recente status gebruikt bij het toevoegen.

Automatische herverbinding

EventSource maakt automatisch opnieuw verbinding wanneer de verbinding wordt verbroken door een netwerkfout of een herstart van de server. De browser wacht kort (doorgaans 3 seconden; de server kan dit in de gegevensstroom configureren via retry: 3000) en maakt daarna opnieuw verbinding. Je hoeft geen logica voor opnieuw verbinden te implementeren — dit is ingebouwd in de EventSource API.

De Last-Event-ID-koptekst

EventSource houdt de id van de laatst ontvangen gebeurtenis bij (ingesteld door de server via id: 123 in de gegevensstroom). Bij het opnieuw verbinden verstuurt de browser deze id automatisch in de HTTP-koptekst Last-Event-ID. Een goed ontworpen server gebruikt deze id om gemiste gebeurtenissen opnieuw af te spelen, zodat er tijdens het opnieuw verbinden geen gebeurtenissen verloren gaan.

Aanmeldgegevens en kopteksten doorgeven

EventSource ondersteunt geen aangepaste kopteksten rechtstreeks. Gebruik voor authenticatie cookies (new EventSource(url, { withCredentials: true }) verstuurt cookies) of voeg het authenticatietoken toe als URL-queryparameter. Als je Authorization-kopteksten nodig hebt, gebruik je de Fetch API met ReadableStream in plaats van EventSource om de SSE-respons handmatig te verwerken.

Verbindingsfouten afhandelen

Wanneer EventSource een fout tegenkomt, wordt de onerror-handler uitgevoerd. De readyState is CONNECTING (als er opnieuw wordt geprobeerd) of CLOSED (als dat niet gebeurt). Controleer in onerror de readyState om onderscheid te maken tussen een tijdelijke netwerkfout (wordt automatisch opnieuw geprobeerd) en een permanente fout (de server gaf geen 200-statuscode terug). Sluit bij permanente fouten de verbinding en breng de gebruiker op de hoogte.

Automatische herverbinding van EventSource

Wat gebeurt er wanneer een EventSource-verbinding door een netwerkfout wordt verbroken?

Lesoverzicht: EventSource in React

new EventSource(url) maakt een SSE-verbinding met de readyStates CONNECTING, OPEN en CLOSED. onmessage verwerkt algemene gebeurtenissen; addEventListener verwerkt benoemde gebeurtenistypen. JSON.parse(event.data) haalt gestructureerde gegevens uit de payload. Maak EventSource aan en ruim het op in useEffect. Automatische herverbinding is ingebouwd — EventSource probeert het na netwerkfouten opnieuw en gebruikt Last-Event-ID om gemiste gebeurtenissen opnieuw af te spelen. Authenticeer via cookies (withCredentials) of URL-queryparameters.

Gratis beginnen

Leer React met een AI-tutor — gratis

Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.

Cursussen
88
Lessen
324

Veelgestelde vragen

Is de les “SSE-streams in React gebruiken met EventSource” gratis?

Ja — de volledige tekst van “SSE-streams in React gebruiken met EventSource” kun je hier gratis op het web lezen. Als je interactief wilt oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is, en de rest van de cursus React Academy wilt ontgrendelen, kun je upgraden naar CoddyKit PRO. De cursus React Academy bevat in totaal 4 lessen.

Wat leer ik in “SSE-streams in React gebruiken met EventSource”?

Maak met EventSource in useEffect verbinding met een SSE-endpoint en geef streaminggegevens in realtime weer. Je oefent met React Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.

Heb ik ervaring nodig om met React Academy te beginnen?

Ervaring vooraf is niet nodig. React Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 2 van 4.

Hoe lang duurt de les “SSE-streams in React gebruiken met EventSource”?

De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.

Kan ik code schrijven en uitvoeren in deze les over React Academy?

Ja. Elke les over React Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.

Alle lessen in deze cursus

  1. Vergelijking van SSE, WebSockets en polling
  2. SSE-streams in React gebruiken met EventSource
  3. Patroon voor long polling en logica voor opnieuw verbinden
  4. Een realtime meldingenfeed bouwen
← Terug naar React Academy