Entwurfsmuster · Middle · Frage 2 von 75
Warum liefert subscribe in einer Observer-Implementierung meist eine Funktion zum Abbestellen?
function subscribe(listener) {
listeners.add(listener);
return () => listeners.delete(listener);
}- 1Damit das Abo nur einmal feuert und sich dann selbst entfernt
- 2Damit der Abonnent leicht abbestellen und ein Speicherleck vermeiden kann
- 3Damit das Subjekt den Abonnenten synchron ohne Event Loop aufruft
Antwort zeigen
Richtige Antwort: Damit der Abonnent leicht abbestellen und ein Speicherleck vermeiden kann
Erklärung
Die gelieferte Funktion passt genau ins Aufräumen von useEffect: useEffect(() => store.subscribe(fn), []). Ohne Abbestellen hält das Subjekt Referenzen auf Callbacks unmounteter Komponenten - ein Leck und zusätzliche Aufrufe. Redux, Zustand und useSyncExternalStore arbeiten so.