Einen Echtzeit-Benachrichtigungsfeed erstellen
Kombinieren Sie SSE mit dem React-Zustand, um einen Benachrichtigungsfeed zu erstellen, der ohne Benutzerinteraktion in Echtzeit aktualisiert wird.
Einen Echtzeit-Benachrichtigungsfeed erstellen ist eine kostenlose React Academy-Lektion auf CoddyKit. Dies ist Lektion 4 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des React Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der React Academy-Kurs umfasst insgesamt 4 Lektionen.
Architektur eines Benachrichtigungs-Feeds
Ein Echtzeit-Benachrichtigungs-Feed kombiniert einen SSE-Stream für eingehende Benachrichtigungen mit REST-Endpunkten zum Markieren von Einträgen als gelesen. Die Komponente verwaltet den lokalen Zustand der Benachrichtigungsliste, abonniert den Server-Stream über EventSource in einem useEffect und verarbeitet Benutzerinteraktionen (als gelesen markieren, ausblenden) mit optimistischen Aktualisierungen.
Datenstruktur einer Benachrichtigung
Ein Benachrichtigungsobjekt hat typischerweise folgende Struktur: { id: string, type: 'info' | 'warning' | 'success', message: string, timestamp: string, read: boolean }. Das Feld type bestimmt Symbol und Farbe. Das Feld read gibt an, ob der Benutzer die Benachrichtigung zur Kenntnis genommen hat. timestamp ermöglicht die Gruppierung nach Zeiträumen.
SSE-Stream abonnieren
Erstellen Sie in einem useEffect eine EventSource-Verbindung zu /api/notifications/stream. Analysieren Sie bei jedem message-Ereignis das JSON und fügen Sie die neue Benachrichtigung am Anfang des Zustands ein: setNotifications(prev => [JSON.parse(e.data), ...prev]). Das Einfügen am Anfang (das Verhalten von unshift) platziert die neueste Benachrichtigung oben, was bei Benachrichtigungs-Feeds üblich ist.
Badge für die Anzahl ungelesener Benachrichtigungen
Leiten Sie die Anzahl ungelesener Benachrichtigungen ohne zusätzlichen Zustand aus dem Benachrichtigungsarray ab: const unreadCount = notifications.filter(n => !n.read).length. Zeigen Sie sie als Badge am Glockensymbol für Benachrichtigungen an. Die Anzahl wird automatisch aktualisiert, sobald sich der Benachrichtigungszustand ändert – eine separate Zustandsverwaltung ist nicht erforderlich.
Als gelesen markieren mit optimistischer Aktualisierung
Wenn der Benutzer auf eine Benachrichtigung klickt, wenden Sie sofort eine optimistische Aktualisierung des Lesestatus an: setNotifications(prev => prev.map(n => n.id === id ? { ...n, read: true } : n)). Senden Sie anschließend im Hintergrund eine PATCH-Anfrage an /api/notifications/:id mit { read: true }. Machen Sie die optimistische Aktualisierung rückgängig, wenn die Anfrage fehlschlägt.
Benachrichtigungen nach Zeit gruppieren
Gruppieren Sie Benachrichtigungen für die Anzeige in „Heute“ (derselbe Kalendertag), „Gestern“ und „Älter“. Ermitteln Sie die Gruppe anhand des Zeitstempels der Benachrichtigung und des aktuellen Datums: const today = new Date().toDateString(). Rendern Sie jede Gruppe als separaten Abschnitt mit einer Überschrift. Dadurch lässt sich eine lange Benachrichtigungsliste deutlich leichter überblicken.
Toast-Benachrichtigungen für Aktivitäten im Hintergrund
Wenn sich der Benutzer auf einer anderen Seite befindet und über SSE eine neue Benachrichtigung eintrifft, zeigen Sie zusätzlich zur Aktualisierung der Benachrichtigungsliste oder an ihrer Stelle eine Toast-Benachrichtigung an. Verwenden Sie einen globalen Benachrichtigungskontext oder einen Zustandsspeicher von Zustand, auf den sowohl der SSE-Abonnent als auch der Toast-Renderer zugreifen können. Der Toast verschwindet nach einigen Sekunden, während die Benachrichtigung in der Liste erhalten bleibt.
Globaler Benachrichtigungskontext
Für Benachrichtigungen, die in der gesamten Anwendung erscheinen, speichern Sie diese auf der obersten Ebene der Anwendung in einem React-Kontext oder einem Zustand-Speicher. Das SSE-Abonnement befindet sich in einer Provider-Komponente nahe der Wurzel des Komponentenbaums. Jede Komponente kann Benachrichtigungen lesen oder über den gemeinsamen Speicher neue Benachrichtigungen auslösen, sodass Toasts von jeder Seite aus dargestellt werden können.
SSE-Wiederverbindung beim Fokussieren eines Tabs
EventSource stellt die Verbindung bei einem Netzwerkausfall automatisch wieder her, Änderungen der Tab-Sichtbarkeit verhalten sich jedoch anders. Wenn der Benutzer nach längerer Abwesenheit zu einem Tab zurückkehrt, wurde die SSE-Verbindung möglicherweise vom Server beendet. EventSource stellt die Verbindung automatisch wieder her, und der Mechanismus mit Last-Event-ID überträgt alle Benachrichtigungen erneut, die der Benutzer verpasst hat, während der Tab im Hintergrund war.
Benachrichtigungen über die Navigation hinweg speichern
Single-Page-Anwendungen verlieren den im Arbeitsspeicher gehaltenen Benachrichtigungszustand, wenn Sie von der Seite weg navigieren. Speichern Sie die Benachrichtigungen nach jeder Aktualisierung in localStorage: localStorage.setItem('notifications', JSON.stringify(notifications)). Initialisieren Sie den Zustand beim Mounten aus localStorage, bevor der SSE-Stream eine Verbindung herstellt. Dadurch bleibt der Benachrichtigungsverlauf beim Navigieren zwischen Seiten erhalten.
Muster für einen SSE-Endpunkt
Der serverseitige SSE-Endpunkt muss bestimmte Header setzen: Content-Type: text/event-stream, Cache-Control: no-cache und Connection: keep-alive. In Express/NestJS schreiben Sie Ereignisse als data: ${JSON.stringify(payload)}\n\n – beachten Sie den doppelten Zeilenumbruch, der das Ende eines Ereignisses signalisiert. Der Server muss nach jedem Schreibvorgang flush aufrufen, damit der Browser das Ereignis sofort empfängt.
Muster für einen SSE-Stream-Endpunkt
Wie lautet der korrekte Content-Type-Header für einen SSE-Endpunkt (Server-Sent Events)?
Lektionsrückblick: Echtzeit-Benachrichtigungs-Feed
Benachrichtigungs-Feeds kombinieren ein SSE-Abonnement (useEffect mit Bereinigung von EventSource) mit REST-Mutationen (PATCH zum Markieren als gelesen). Datenstruktur: {id, type, message, timestamp, read}. Leiten Sie unreadCount mit filter ab und gruppieren Sie die Benachrichtigungen für die Anzeige nach heute/gestern/älter. Verwenden Sie einen globalen Kontext oder Zustand für seitenübergreifende Toasts. Speichern Sie die Daten in localStorage, damit sie beim Navigieren erhalten bleiben. Der SSE-Endpunkt erfordert Content-Type: text/event-stream, Cache-Control: no-cache und doppelte Zeilenumbrüche als Ereignis-Trennzeichen.
Häufig gestellte Fragen
Ist die Lektion „Einen Echtzeit-Benachrichtigungsfeed erstellen“ kostenlos?
Ja — der vollständige Text von „Einen Echtzeit-Benachrichtigungsfeed erstellen“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des React Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der React Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „Einen Echtzeit-Benachrichtigungsfeed erstellen“?
Kombinieren Sie SSE mit dem React-Zustand, um einen Benachrichtigungsfeed zu erstellen, der ohne Benutzerinteraktion in Echtzeit aktualisiert wird. Du übst React Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um React Academy zu starten?
Keine Vorkenntnisse erforderlich. React Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 4 von 4.
Wie lange dauert die Lektion „Einen Echtzeit-Benachrichtigungsfeed erstellen“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser React Academy-Lektion Code schreiben und ausführen?
Ja. Jede React Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- SSE vs. WebSockets vs. Polling im Vergleich
- SSE-Streams in React mit EventSource konsumieren
- Long-Polling-Muster und Wiederverbindungslogik
- Einen Echtzeit-Benachrichtigungsfeed erstellen