Creazione di un feed di notifiche in tempo reale
Combini SSE e lo stato di React per creare un feed di notifiche che si aggiorna in tempo reale senza interazione dell’utente.
Creazione di un feed di notifiche in tempo reale è una lezione React Academy gratuita su CoddyKit. Questa è la lezione 4 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.
Architettura di un feed di notifiche
Un feed di notifiche in tempo reale combina uno stream SSE per le notifiche in arrivo con endpoint REST per contrassegnare gli elementi come letti. Il componente mantiene nello stato locale l'elenco delle notifiche, si iscrive allo stream del server tramite EventSource in un useEffect e gestisce le interazioni dell'utente (contrassegnare come letto, ignorare) con aggiornamenti ottimistici.
Struttura dei dati di una notifica
Un oggetto di notifica ha in genere questa struttura: { id: string, type: 'info' | 'warning' | 'success', message: string, timestamp: string, read: boolean }. Il campo type determina l'icona e il colore. Il campo read indica se l'utente ha preso visione della notifica. Il campo timestamp consente di raggruppare le notifiche per periodo.
Sottoscrizione allo stream SSE
In un useEffect, crei un EventSource connesso a /api/notifications/stream. A ogni evento message, analizzi il JSON e aggiungi la nuova notifica all'inizio dello stato: setNotifications(prev => [JSON.parse(e.data), ...prev]). L'inserimento all'inizio (comportamento di unshift) porta la notifica più recente in cima, secondo lo standard dei feed di notifiche.
Badge del conteggio delle notifiche non lette
Ricavi il conteggio delle notifiche non lette dall'array delle notifiche senza utilizzare uno stato aggiuntivo: const unreadCount = notifications.filter(n => !n.read).length. Mostri questo valore come badge sull'icona della campanella delle notifiche. Il conteggio si aggiorna automaticamente ogni volta che cambia lo stato delle notifiche: non è necessaria una gestione separata dello stato.
Contrassegnare come letto con un aggiornamento ottimistico
Quando l'utente fa clic su una notifica, applichi immediatamente un aggiornamento ottimistico che la contrassegna come letta: setNotifications(prev => prev.map(n => n.id === id ? { ...n, read: true } : n)). Invii quindi in background una richiesta PATCH a /api/notifications/:id con { read: true }. Ripristini l'aggiornamento ottimistico se la richiesta non riesce.
Raggruppamento delle notifiche per periodo
Raggruppi le notifiche per la visualizzazione: "Oggi" (stesso giorno di calendario), "Ieri" e "Meno recenti". Calcoli il gruppo utilizzando il timestamp della notifica e la data corrente: const today = new Date().toDateString(). Visualizzi ogni gruppo in una sezione separata con un'etichetta di intestazione. In questo modo è molto più semplice scorrere un lungo elenco di notifiche.
Notifiche toast per le attività in background
Quando l'utente si trova in un'altra pagina e arriva una nuova notifica tramite SSE, mostri una notifica toast invece di aggiornare l'elenco delle notifiche, oppure in aggiunta a tale aggiornamento. Utilizzi un contesto globale per le notifiche o uno store Zustand accessibile sia dal sottoscrittore SSE sia dal renderer dei toast. Il toast scompare dopo alcuni secondi, mentre la notifica rimane nell'elenco.
Contesto globale delle notifiche
Per le notifiche visualizzate in tutta l'applicazione, le memorizzi in un contesto React o in uno store Zustand al livello radice dell'applicazione. La sottoscrizione SSE risiede in un componente provider vicino alla parte superiore dell'albero dei componenti. Qualsiasi componente può leggere le notifiche o inviarne di nuove tramite lo store condiviso, consentendo di visualizzare toast da qualsiasi pagina.
Riconnessione SSE quando la scheda torna attiva
EventSource gestisce automaticamente la riconnessione quando la rete si interrompe, ma i cambiamenti di visibilità della scheda sono un caso diverso. Quando l'utente torna a una scheda dopo una lunga assenza, la connessione SSE potrebbe essere stata terminata dal server. EventSource si riconnette automaticamente e il meccanismo Last-Event-ID riproduce le notifiche perse mentre la scheda era in background.
Persistenza delle notifiche durante la navigazione
Le applicazioni a pagina singola perdono lo stato delle notifiche in memoria quando si passa a un'altra pagina. Memorizzi le notifiche in localStorage dopo ogni aggiornamento: localStorage.setItem('notifications', JSON.stringify(notifications)). Al montaggio, inizializzi lo stato da localStorage prima che lo stream SSE stabilisca la connessione. In questo modo si conserva la cronologia delle notifiche durante la navigazione tra le pagine.
Struttura di un endpoint SSE
L'endpoint SSE lato server deve impostare intestazioni specifiche: Content-Type: text/event-stream, Cache-Control: no-cache e Connection: keep-alive. In Express/NestJS, scriva gli eventi come data: ${JSON.stringify(payload)}\n\n: noti la doppia nuova riga, che segnala la fine di un evento. Il server deve eseguire il flush dopo ogni scrittura per assicurarsi che il browser riceva immediatamente l'evento.
Struttura dell'endpoint dello stream SSE
Qual è l'intestazione Content-Type corretta per un endpoint SSE (Server-Sent Events)?
Riepilogo della lezione: feed di notifiche in tempo reale
I feed di notifiche combinano una sottoscrizione SSE (useEffect con la pulizia di EventSource) con mutazioni REST (PATCH per contrassegnare come letto). Struttura dei dati: {id, type, message, timestamp, read}. Ricavi unreadCount con filter e raggruppi le notifiche in oggi/ieri/meno recenti per la visualizzazione. Utilizzi un contesto globale o Zustand per i toast tra le pagine. Memorizzi i dati in localStorage per mantenere le notifiche durante la navigazione. L'endpoint SSE richiede Content-Type: text/event-stream, Cache-Control: no-cache e delimitatori degli eventi costituiti da una doppia nuova riga.
Domande Frequenti
La lezione «Creazione di un feed di notifiche in tempo reale» è gratuita?
Sì — il testo completo di «Creazione di un feed di notifiche in tempo reale» è 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 «Creazione di un feed di notifiche in tempo reale»?
Combini SSE e lo stato di React per creare un feed di notifiche che si aggiorna in tempo reale senza interazione dell’utente. 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 4 di 4.
Quanto tempo richiede la lezione «Creazione di un feed di notifiche in tempo reale»?
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