Se consideri la serie di azioni nella tua app come una lista, o forse più come un flusso, potrebbe avere più senso.
prendere questo esempio forzato:
['apple', 'banana', 'cherry'].reduce((acc, item) => acc + item.length, 0)
Il primo argomento è una funzione della forma (Int, String) => Int
. Insieme a un valore iniziale, si passa a reduce
ciò che potrebbe essere chiamato una "funzione di riduzione" e si ottiene il risultato dell'elaborazione della serie di elementi. Quindi si potrebbe dire che la funzione di riduzione descrive cosa viene fatto con ogni singolo elemento successivo per modificare il risultato. In altre parole, la funzione reducer prende l'output precedente e il valore successivo e calcola l'output successivo.
Questo è analogo a quello che fa un riduttore di Redux: prende lo stato precedente e l'azione corrente e calcola lo stato successivo.
In vero stile di programmazione funzionale, è possibile cancellare concettualmente il significato applicato agli argomenti e al risultato e concentrarsi solo sulla "forma" degli input e dell'output.
In pratica, i riduttori di Redux sono tipicamente ortogonali, nel senso che per una determinata azione, non tutti apportano modifiche alle stesse proprietà, il che rende facile dividere le loro responsabilità e aggregare l'output con combineReducers
.
Sono riduttori esattamente perché si comportano come la funzione passata a 'reduce', che ha accesso al valore predefinito e ad un altro valore, e restituisce il valore predefinito potenzialmente trasformato.'state -> action -> state' – azium
una rosa con qualsiasi altro nome ... probabilmente marketing; map/reduce è una parola d'ordine ora ... – dandavis