Jeśli uważasz, że seria działań w Twojej aplikacji przypomina listę, a może bardziej strumień, może to mieć większy sens.
Weźmy ten wymyślony przykład:
['apple', 'banana', 'cherry'].reduce((acc, item) => acc + item.length, 0)
Pierwszy argument jest funkcją formularza (Int, String) => Int
. Wraz z wartością początkową przekazujesz reduce
coś, co można by nazwać „funkcją redukującą”, i otrzymujesz wynik przetwarzania serii elementów. Można więc powiedzieć, że funkcja reduktora opisuje, co jest robione z każdym kolejnym pojedynczym elementem, aby zmienić wynik. Innymi słowy, funkcja reduktora pobiera poprzednią wartość wyjściową i następną wartość i oblicza następną wartość wyjściową.
Jest to analogiczne do tego, co robi reduktor Redux: przyjmuje poprzedni stan i bieżącą akcję i oblicza następny stan.
W prawdziwym funkcjonalnym stylu programowania można koncepcyjnie wymazać znaczenie przypisane argumentom i wynikom, a po prostu skupić się na „kształcie” danych wejściowych i wyjściowych.
W praktyce reduktory Redux są zazwyczaj ortogonalne, w tym sensie, że dla danego działania nie wszystkie wprowadzają zmiany w tych samych właściwościach, co ułatwia podzielenie ich obowiązków i agregowanie wyników combineReducers
.
reduce
której przekazujesz , która ma dostęp do wartości domyślnej i innej wartości, i zwraca potencjalnie przekształconą wartość domyślną.state -> action -> state