0Pricing
React Academy · Lekcja

Korzystanie ze strumieni SSE w React z EventSource

Połączą się Państwo z punktem końcowym SSE za pomocą EventSource w useEffect i wyświetlą dane przesyłane strumieniowo w czasie rzeczywistym.

Korzystanie ze strumieni SSE w React z EventSource to bezpłatna lekcja React Academy na CoddyKit. To lekcja 2 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej React Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs React Academy zawiera 4 lekcji w sumie.

Tworzenie połączenia EventSource

new EventSource(url) tworzy połączenie SSE ze wskazanym adresem URL. Przeglądarka natychmiast otwiera żądanie HTTP GET z nagłówkiem Accept: text/event-stream. Serwer utrzymuje to połączenie otwarte i przesyła strumieniowo zdarzenia. EventSource to natywne API przeglądarki — do podstawowego użycia nie jest wymagana żadna biblioteka.

Stany cyklu życia połączenia

EventSource ma trzy stany gotowości: 0 (CONNECTING) — połączenie jest ustanawiane lub ponownie ustanawiane, 1 (OPEN) — połączenie zostało ustanowione i zdarzenia są przesyłane, 2 (CLOSED) — połączenie jest zamknięte i nie zostanie ponownie nawiązane. Bieżący stan można sprawdzić za pomocą eventSource.readyState.

onmessage dla zdarzeń ogólnych

Procedura obsługi eventSource.onmessage jest wywoływana dla zdarzeń serwera, które nie mają jawnie określonego typu zdarzenia (serwer wysyła data: ... bez pola event:). Procedura obsługi otrzymuje obiekt zdarzenia, w którym event.data zawiera dane jako ciąg znaków. Serwer zazwyczaj serializuje dane za pomocą JSON.stringify, aby po stronie klienta można było użyć JSON.parse po ich odebraniu.

Nazwane zdarzenia niestandardowe

Serwer może wysyłać nazwane zdarzenia: event: userJoined\ndata: {"userId": "123"}\n\n. W przeglądarce należy nasłuchiwać ich za pomocą eventSource.addEventListener('userJoined', handler). Umożliwia to multipleksowanie wielu typów zdarzeń przez jedno połączenie SSE — każdy typ zdarzenia ma własną procedurę obsługi, dzięki czemu kod jest przejrzysty i uporządkowany.

Analizowanie event.data

Dane SSE docierają jako ciągi znaków. W przypadku danych o strukturze serwer wysyła JSON.stringify(payload), a klient je analizuje: const data = JSON.parse(event.data). Zawsze należy umieszczać JSON.parse w bloku try/catch, aby poprawnie obsłużyć nieprawidłowy JSON z serwera, rejestrując błąd i pomijając nieprawidłowe zdarzenie.

useEffect w cyklu życia EventSource

EventSource należy tworzyć i zamykać wewnątrz useEffect: utworzyć połączenie podczas montowania komponentu, podłączyć procedury obsługi zdarzeń i zwrócić funkcję czyszczącą, która wywołuje eventSource.close(). Bez czyszczenia połączenie wycieka, gdy komponent jest odmontowywany, użytkownik przechodzi na inną stronę lub efekt jest ponownie uruchamiany z innymi zależnościami.

Aktualizowanie stanu po otrzymaniu wiadomości

Wewnątrz procedury obsługi eventSource.onmessage należy aktualizować stan React, aby odzwierciedlał nowe dane: setMessages(prev => [...prev, JSON.parse(event.data)]). Należy używać funkcyjnej postaci setState, aby uniknąć problemów z nieaktualnym domknięciem — procedura obsługi przechwytuje początkową wartość stanu, a aktualizacja funkcyjna gwarantuje pracę zawsze na najnowszym stanie.

Automatyczne ponowne łączenie

EventSource automatycznie ponownie nawiązuje połączenie, gdy zostanie ono utracone z powodu błędu sieci lub ponownego uruchomienia serwera. Przeglądarka czeka krótki czas (zwykle 3 sekundy, konfigurowalny przez serwer za pomocą retry: 3000 w strumieniu), a następnie ponownie się łączy. Nie trzeba implementować logiki ponownego łączenia — jest ona wbudowana w API EventSource.

Nagłówek Last-Event-ID

EventSource śledzi ostatni odebrany identyfikator zdarzenia (ustawiany przez serwer za pomocą id: 123 w strumieniu). Podczas ponownego łączenia przeglądarka automatycznie wysyła ten identyfikator w nagłówku HTTP Last-Event-ID. Dobrze zaprojektowany serwer używa go do odtworzenia pominiętych zdarzeń, dzięki czemu podczas ponownego łączenia żadne zdarzenia nie zostaną utracone.

Przekazywanie danych uwierzytelniających i nagłówków

EventSource nie obsługuje bezpośrednio niestandardowych nagłówków. Do uwierzytelniania należy użyć plików cookie (new EventSource(url, { withCredentials: true }) wysyła pliki cookie) albo dołączyć token uwierzytelniający jako parametr zapytania URL. Jeśli potrzebne są nagłówki Authorization, należy użyć Fetch API wraz z ReadableStream zamiast EventSource i ręcznie przetwarzać odpowiedź SSE.

Obsługa błędów połączenia

Gdy EventSource napotka błąd, wywoływany jest handler onerror. Właściwość readyState będzie mieć wartość CONNECTING (jeśli połączenie zostanie ponowione) albo CLOSED (jeśli nie). W funkcji onerror należy sprawdzić readyState, aby odróżnić tymczasowy błąd sieci (połączenie zostanie automatycznie ponowione) od trwałej awarii (serwer zwrócił status inny niż 200). W przypadku trwałych błędów należy zamknąć połączenie i powiadomić użytkownika.

Automatyczne ponowne łączenie EventSource

Co się dzieje, gdy połączenie EventSource zostanie przerwane z powodu błędu sieci?

Podsumowanie lekcji: EventSource w React

new EventSource(url) tworzy połączenie SSE ze stanami readyStates: CONNECTING, OPEN, CLOSED. onmessage obsługuje zdarzenia ogólne, a addEventListener — nazwane typy zdarzeń. JSON.parse(event.data) wyodrębnia uporządkowane dane. EventSource należy tworzyć i sprzątać w useEffect. Automatyczne ponowne łączenie jest wbudowane — EventSource ponawia próbę po błędach sieci, używając Last-Event-ID do odtworzenia pominiętych zdarzeń. Uwierzytelnianie odbywa się za pomocą plików cookie (withCredentials) lub parametrów zapytania URL.

Często zadawane pytania

Czy lekcja „Korzystanie ze strumieni SSE w React z EventSource” jest bezpłatna?

Tak — pełny tekst „Korzystanie ze strumieni SSE w React z EventSource” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu React Academy, przejdź na CoddyKit PRO. Kurs React Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Korzystanie ze strumieni SSE w React z EventSource”?

Połączą się Państwo z punktem końcowym SSE za pomocą EventSource w useEffect i wyświetlą dane przesyłane strumieniowo w czasie rzeczywistym. Ćwiczysz React Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć React Academy?

Nie wymagamy żadnego doświadczenia. React Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 4.

Ile czasu zajmuje lekcja „Korzystanie ze strumieni SSE w React z EventSource”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji React Academy?

Tak. Każda lekcja React Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Porównanie SSE, WebSockets i pollingu
  2. Korzystanie ze strumieni SSE w React z EventSource
  3. Wzorzec long pollingu i logika ponownego łączenia
  4. Budowanie kanału powiadomień w czasie rzeczywistym
← Powrót do React Academy