-
Notifications
You must be signed in to change notification settings - Fork 1
Reductores
##Descripción# Según las guías de diseño de Redux, los reductores han de ser funciones puras, es decir, no pueden tener efectos colaterales y tienen que ser determinísticos, dada una entrada, la salida siempre será igual. En concreto, las entradas a una función reductora son una porción del estado y una acción y la salida es una nueva versión del estado entregado modificado de manera acorde a la acción.
Aparte del requisito de la "pureza", el otro es que un reductor siempre debe devolver algo. El principal motivo es que el estado se construye a partir de los resultados de los distintos reductores, no existe como tal de manera independiente y se reconstruye según los resultados de los reductores.
Redux proporciona un método llamado "combineReducers" que lo que hace es, dado un objeto especial, devuelve un único reductor que engloba a todos los demás y que podrá usarse para construir el almacén. Este objeto especial es el que define la forma que va a tener el estado, ya que contiene las funciones reductoras asociadas a una clave. Por tanto, al construir el almacén, se invocará al método "combineReducers", que llamará uno por uno a todos los reductores especificados sin pasarles ningún argumento y, dado que están obligados a devolver siempre un valor, el valor por defecto que devuelvan será el valor inicial para la porción del estado a la que están asociados. Posteriormente, cuando se lance una acción, también se llamará a este método que proporcionará a cada reductor el valor que devolvió la última vez (su porción del estado) y la acción lanzada. Si se desea que la acción afecte a esa parte del estado, entonces se devolverá una nueva versión, si no, se devolverá la entregada.
A continuación, se explicarán los reductores utilizados, pero sin entrar demasiado en detalle:
Clave asignada | Nombre de la función | Forma del resultado | Función que hace |
---|---|---|---|
pageModalToggled | togglePageModal | {value: false, caller: "bo-124214"} |
Usado para desplegar el modal de selección de vista al crear una nueva |
boxesById | boxesById | {"bo-124214": caja0, "bo-124215": caja1} |
Crea el diccionario que contiene todas las cajas |
boxSelected | boxSelected | "bo-124214" |
Indica la caja seleccionada |
boxes | boxesIds | ["bo-124214", "bo-124215"] |
Crea el array de identificadores de cajas |
navItemsIds | navItemsIds | [0, "se-123321"] |
Crea el array de identificadores de vistas |
navItemSelected | navItemSelected | "se-123321" |
Indica la vista seleccionada |
navItemsById | navItemsById | {0: seccion0, "se-123321": vista0} |
Crea el diccionario que contiene todas las vistas |
toolbarsById | toolbarsById | {"bo-124214": barra0, "bo-124215": barra1} |
Crea el diccionario que contiene todas las barras de herramientas |
Además, está el reductor _"sortableContainers" que genera la propiedad "sortableContainers" de los DaliBox
, pero no forma parte del estado general sino que sólo es invocado desde el reductor "boxesById". Como se ha dicho antes, los reductores atienden a las acciones que consideran convenientes, por ejemplo, "boxesById" atiende tanto a las relativas a los DaliBox
(crear, eliminar, modificar, mover, etc.) como a las de los SortableContainer
(crear, cambiar el tamaño, cambiar la distribución de filas o columnas, etc.) ya que el reductor correspondiente está contenido dentro.
##Mejoras futuras# Conseguir un anidamiento de reductores mayor y unos nombre más descriptivos