Reductores
Esta página fue traducida por PageTurner AI (beta). No está respaldada oficialmente por el proyecto. ¿Encontraste un error? Reportar problema →
FAQ de Redux: Reductores
¿Cómo comparto estado entre dos reductores? ¿Es obligatorio usar combineReducers?
La estructura sugerida para un almacén de Redux es dividir el objeto de estado en múltiples "porciones" o "dominios" por clave, con una función reductora independiente para gestionar cada segmento de datos. Esto es similar al patrón Flux estándar con múltiples almacenes independientes. Redux proporciona la función de utilidad combineReducers para facilitar este patrón. Sin embargo, es importante destacar que combineReducers no es obligatoria—es simplemente una función auxiliar para el caso de uso común de tener un reductor por porción de estado, usando objetos simples de JavaScript para los datos.
Muchos usuarios intentan compartir datos entre reductores y descubren que combineReducers no lo permite. Existen varios enfoques posibles:
-
Si un reductor necesita datos de otra porción del estado, quizás debas reorganizar la estructura del árbol de estado para que un único reductor gestione más datos.
-
Puedes crear funciones personalizadas para manejar ciertas acciones, lo que podría implicar reemplazar
combineReducerscon tu propia función reductora principal. También puedes usar utilidades como reduce-reducers para ejecutarcombineReducersen la mayoría de acciones y un reductor especializado para acciones que crucen múltiples porciones. -
Los middlewares con lógica asíncrona como redux-thunk acceden al estado completo mediante
getState(). Un creador de acciones puede extraer datos adicionales del estado e incluirlos en la acción, dando a cada reductor suficiente información para actualizar su porción.
Recuerda que los reductores son simplemente funciones—puedes organizarlas y subdividirlas como prefieras, y se recomienda descomponerlas en funciones más pequeñas y reutilizables ("composición de reductores"). Si un reductor hijo necesita datos adicionales para calcular su siguiente estado, puedes pasar un tercer argumento personalizado desde el reductor padre. Solo asegúrate de cumplir las reglas básicas: (state, action) => newState y actualizar el estado de forma inmutable, nunca mutándolo directamente.
Más información
Documentación
Debates
-
#601: Una preocupación sobre combineReducers cuando una acción afecta múltiples reductores
-
#1400: ¿Es un antipatrón pasar el objeto de estado completo a reductores secundarios?
-
Stack Overflow: Acceder a otras partes del estado con reductores combinados
-
Stack Overflow: Reducir un subárbol completo con combineReducers
¿Debo usar la sentencia switch para manejar acciones?
No. Puedes usar cualquier enfoque para responder a acciones en un reductor. Aunque switch es lo más común, también puedes usar sentencias if, tablas de búsqueda de funciones o funciones abstractas. Redux requiere que los objetos de acción tengan un campo type, pero tu lógica reductora no necesita basarse en él para manejar acciones. Dicho esto, el enfoque estándar es definitivamente usar switch o tablas de búsqueda basadas en type.
Más información
Documentación
Debates