59. BehaviorSubject et ReplaySubject
Ces Subjects spécialisés sont essentiels pour la gestion d'état dans les services car ils permettent aux nouveaux abonnés de recevoir instantanément une valeur précédente.
1. BehaviorSubject<T> (État actuel)
Un BehaviorSubject nécessite une valeur initiale à la création. Lorsqu'un nouvel abonné arrive, il reçoit immédiatement la dernière valeur émise avant de recevoir les futures émissions.
Cas d'usage : Suivi du statut de l'utilisateur, contenu du panier d'achat ou configuration de l'application (où chaque abonné a besoin de connaître l'état actuel immédiatement).
typescript import { BehaviorSubject } from 'rxjs';
const theme$ = new BehaviorSubject
// L'abonné A reçoit 'light' immédiatement theme$.subscribe(theme => console.log('A:', theme));
theme$.next('dark'); // Tous les abonnés reçoivent 'dark'
// L'abonné B s'abonne plus tard theme$.subscribe(theme => console.log('B:', theme)); // B reçoit immédiatement 'dark'
theme$.next('system'); /* Séquence de sortie : A: light, A: dark, B: dark, A: system, B: system */
// Nous pouvons lire la valeur actuelle de manière synchrone sans s'abonner console.log(theme$.value); // 'system'
2. ReplaySubject<T> (Historique)
Un ReplaySubject enregistre un nombre spécifié de valeurs émises et les rejoue pour tout nouvel abonné.
Cas d'usage : Journalisation d'erreurs (si un utilisateur clique sur un bouton, vous pourriez vouloir voir les 5 derniers logs survenus juste avant le clic).
typescript import { ReplaySubject } from 'rxjs';
// Rejouer les 2 dernières valeurs
const notification$ = new ReplaySubject
notification$.next('A'); notification$.next('B'); notification$.next('C'); // 'A' est supprimé de l'historique
// Le nouvel abonné D arrive notification$.subscribe(msg => console.log('D a reçu :', msg)); // Sortie : D a reçu : B, D a reçu : C