Sto osservando il tutorial di Dan Abramov su Redwood su Egghead, e lui fa qualcosa di cui sono un po 'confuso. Come esercizio di apprendimento, gli spettatori hanno ricostruito l'astrazione createStore
. Un metodo createStore
fornisce è subscribe
, che consente ai listener di ascoltare le modifiche degli archivi.ES6/Redux: restituisce una funzione per rimuovere l'ascoltatore di eventi
Poi dice:
C'è un importante pezzo mancante qui. Non abbiamo fornito un modo per annullare l'iscrizione a un ascoltatore. Anziché aggiungere un metodo di annullamento sottoscrizione dedicato, verrà semplicemente restituita una funzione dal metodo Sottoscrivi che rimuove questo listener dall'array degli ascoltatori.
Così il codice che usa per aggiungere/rimuovere l'ascoltatore è:
const subscribe = (listener) => {
listeners.push(listener);
return() => {
listeners = listeners.filter(l => l !== listener);
};
};
I sorta di capire che questo consente di utilizzare una funzione sia per aggiungere/rimuovere, e che questo è possibile perché se si passa al metodo subscribe il nome di un listener già sottoscritto, il filtro lo rimuoverà, lo faccio non per capire perché questo restituisce una funzione di freccia piuttosto che un array di listener. Come/quando verrebbe invocata questa funzione restituita?
Volevo solo aggiungere che questo è un approccio molto comune. Ad esempio, dai un'occhiata a come funziona la funzione AngularJS [$ scope. $ On()] (https://docs.angularjs.org/api/ng/type/$rootScope.Scope). Restituisce una funzione di deregistrazione per un ascoltatore. – Warlock
Grazie, questa è una buona spiegazione e uno schema piuttosto interessante che non avevo mai visto/notato prima! – HowlingFantods
Ma perché non definire una funzione di annullamento dell'iscrizione e il componente che implementa il listener può chiamare store.unsubscribe (listener). È perché disaccoppia il componente dal negozio? – sabman