Oglądam tutorial Redbe Dana Abramova o Egghead, a on robi coś, co mnie trochę pomieszało. Jako ćwiczenie do nauki ma on przeglądać odbudowę createStore
. Jedną z metod jest createStore
, która dodaje detektory do nasłuchiwania zmian w sklepie.ES6/Redux: zwracanie funkcji usuwania detektora zdarzeń
Potem mówi:
Jest to ważny kawałek brakuje tutaj. Nie udostępniliśmy sposobu na anulowanie subskrypcji. Zamiast dodawać dedykowaną metodę Unsubscribe, zwrócimy tylko funkcję z metody Subscribe, która usuwa ten obiekt nasłuchujący z tablicy detektorów.
Więc kod używa do dodawania/usuwania słuchacza jest:
const subscribe = (listener) => {
listeners.push(listener);
return() => {
listeners = listeners.filter(l => l !== listener);
};
};
I rodzaju zrozumieć, że ta pozwala na użycie jedną funkcję zarówno dodaj/usuń, a że jest to możliwe, ponieważ jeśli przekażesz metodę subskrybowania nazwę odbiornika, który jest już subskrybowany, filtr usunie go, rozumiem, dlaczego to zwraca funkcję strzałki, a nie tablicę detektorów. W jaki sposób/kiedy funkcja ta mogłaby zostać wywołana?
Chciałem tylko dodać, że jest to bardzo powszechne podejście. Na przykład spójrz, jak działa funkcja AngularJS [$ scope. $ On()] (https://docs.angularjs.org/api/ng/type/$rootScope.Scope). Zwraca funkcję wyrejestrowania dla detektora. – Warlock
Dziękuję, to jest dobre wytłumaczenie i całkiem fajny wzór, którego wcześniej nie widziałem/nie zauważyłem! – HowlingFantods
Ale dlaczego nie zdefiniować funkcji wypisania się, a komponent implementujący detektor może wywołać store.unsubscribe (listener). Czy to dlatego, że oddziela komponent od sklepu? – sabman