Skip to content
Jorge Bellon edited this page Jun 16, 2016 · 2 revisions

##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