-
Notifications
You must be signed in to change notification settings - Fork 13
Reductores_es
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 realiza |
|---|---|---|---|
| globalConfig | globalConfig | { title: Nuevo curso, version: '1.0.0', difficulty: 'easy', ... } |
Configuración global del curso |
| boxesById | boxesById | {"bo-124214": caja0, "bo-124215": caja1} |
Crea el diccionario que contiene todas las cajas |
| boxSelected | boxSelected | "bo-124214" |
Indica la caja seleccionada |
| 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 |
| pluginToolbarsById | pluginToolbarsById | {"bo-124214": barra0, "bo-124215": barra1} |
Crea el diccionario que contiene todas las barras de herramientas de las cajas |
| viewToolbarsById | viewToolbarsById | {"pa-124214": barra0, "pa-124215": barra1} |
Crea el diccionario que contiene todas las barras de herramientas de las vistas |
| exercises | exercises | {"pa-124214": cuestionario0, "pa-124215": cuestionario1} |
Crea el diccionario que contiene toda el modelo de datos de los ejercicios |
| containedViewSelected | containedViewSelected | "cv-123321" |
Indica la vista contenida seleccionada |
| containedViewsById | containedViewsById | {"cv-123321": vista0, "cv-456321": vista1} |
Crea el diccionario que contiene todas las vistas contenidas |
| indexSelected | indexSelected |
"se-123321" o "cv-123321"
|
Indica la vista o vista contenida seleccionada en el índice para poder eliminarla, crear vistas hermanas/hijas, etc. |
Además, está el reductor _"sortableContainers" que genera la propiedad "sortableContainers" de los EditorBox, 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 EditorBox(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.
Conseguir un anidamiento de reductores mayor y unos nombre más descriptivos