Derzeit akzeptiert bindActionCreators
eine einzelne Funktion oder ein Objekt von Funktionen. Es wäre nützlich, wenn es auch ein Array akzeptieren würde, um dieses Codemuster zu unterstützen:
import * as ac from './actionCreators';
// later in file...
const [doThis, doSomethingElse, doAnotherThing] = bindActionCreators(
[ac.doThis, ac.doSomethingElse, ac.doAnotherThing
], dispatch);
// ...
Ich gebe meine Erstellernamen gerne explizit an, da Fehler sofort von eslint-plugin-import/namespace als Fehler abgefangen werden.
Ich glaube, das ist die notwendige Änderung:
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}. ` +
Ich denke, es wäre zu viel, bindActionCreator
polymorpher zu machen. Wie wäre es, wenn Sie einfach eine Wrapping-Funktion erstellen, die dies für Sie erledigt?
function mapBindActionCreators(actions, dispatch) {
return actions.map(action => bindActionCreator(action, dispatch)
}
Wenn Sie ein Array davon haben, können Sie das Array reduce()
in ein Objekt einfügen und dieses an bindActionCreator
übergeben
Ja, ich denke, wir möchten vermeiden, hier jede mögliche Permutation zu unterstützen.
Hilfreichster Kommentar
Ich denke, es wäre zu viel,
bindActionCreator
polymorpher zu machen. Wie wäre es, wenn Sie einfach eine Wrapping-Funktion erstellen, die dies für Sie erledigt?