Actualmente, bindActionCreators
acepta una sola función o un objeto de funciones. Sería útil si también aceptara una matriz, para ayudar a este patrón de código:
import * as ac from './actionCreators';
// later in file...
const [doThis, doSomethingElse, doAnotherThing] = bindActionCreators(
[ac.doThis, ac.doSomethingElse, ac.doAnotherThing
], dispatch);
// ...
Me gusta especificar los nombres de mis creadores explícitamente porque eslint-plugin-import/namespace detecta inmediatamente cualquier error como un error.
Creo que este es el cambio necesario:
diff --git a/src/bindActionCreators.js b/src/bindActionCreators.js
index e70e270..6050c32 100644
--- a/src/bindActionCreators.js
+++ b/src/bindActionCreators.js
@@ -28,6 +28,10 @@ export default function bindActionCreators(actionCreators, dispatch) {
return bindActionCreator(actionCreators, dispatch)
}
+ if (Array.isArray(actionCreators)) {
+ return actionCreators.map(ac => bindActionCreator(ac, dispatch));
+ }
+
if (typeof actionCreators !== 'object' || actionCreators === null) {
throw new Error(
`bindActionCreators expected an object or a function, instead received ${actionCreators === null ? 'null' : typeof actionCreators}. ` +
Creo que hacer que bindActionCreator
sea más polimórfico sería demasiado, ¿qué tal crear una función de ajuste que haga esto por ti?
function mapBindActionCreators(actions, dispatch) {
return actions.map(action => bindActionCreator(action, dispatch)
}
Si tiene una matriz de ellos, podría reduce()
la matriz en un objeto y pasar eso a bindActionCreator
Sí, creo que nos gustaría evitar admitir todas las permutaciones posibles aquí.
Comentario más útil
Creo que hacer que
bindActionCreator
sea más polimórfico sería demasiado, ¿qué tal crear una función de ajuste que haga esto por ti?