Si considera que la serie de acciones en su aplicación es como una lista, o tal vez más como una transmisión, podría tener más sentido.
Tome este ejemplo artificial:
['apple', 'banana', 'cherry'].reduce((acc, item) => acc + item.length, 0)
El primer argumento es una función de la forma (Int, String) => Int
. Junto con un valor inicial, pasa reduce
lo que podría llamarse una "función reductora" y obtiene el resultado de procesar la serie de elementos. Podría decirse que la función reductora describe lo que se hace con cada elemento individual sucesivo para cambiar el resultado. En otras palabras, la función reductora toma la salida anterior y el siguiente valor, y calcula la siguiente salida.
Esto es análogo a lo que hace un reductor Redux: toma el estado anterior y la acción actual, y calcula el siguiente estado.
En el verdadero estilo de programación funcional, puede borrar conceptualmente el significado aplicado a los argumentos y el resultado, y simplemente centrarse en la "forma" de las entradas y salidas.
En la práctica, los reductores Redux suelen ser ortogonales, en el sentido de que para una acción determinada, no todos realizan cambios en las mismas propiedades, lo que facilita la división de responsabilidades y la agregación de la salida combineReducers
.
reduce
, que tiene acceso al valor predeterminado y a otro valor, y le devuelve su valor predeterminado potencialmente transformado.state -> action -> state