Wzorce projektowe · Middle · Pytanie 2 z 75
Dlaczego subscribe w implementacji Observera zwykle zwraca funkcję wypisującą?
function subscribe(listener) {
listeners.add(listener);
return () => listeners.delete(listener);
}- ✓Poprawna odpowiedź: Aby subskrybent mógł łatwo się wypisać i uniknąć wycieku pamięci
- 2Aby subskrypcja zadziałała tylko raz, a potem sama się usunęła
- 3Aby podmiot mógł wywołać subskrybenta synchronicznie, bez event loop
Wyjaśnienie
Zwrócona funkcja wygodnie pasuje do funkcji czyszczącej useEffect: useEffect(() => store.subscribe(fn), []). Bez wypisania podmiot trzyma referencje do callbacków odmontowanych komponentów - wyciek i zbędne wywołania. Tak działają Redux, Zustand i useSyncExternalStore.