Saat ini, bindActionCreators
menerima fungsi tunggal atau objek fungsi. Akan berguna jika menerima array juga, untuk membantu pola kode ini:
import * as ac from './actionCreators';
// later in file...
const [doThis, doSomethingElse, doAnotherThing] = bindActionCreators(
[ac.doThis, ac.doSomethingElse, ac.doAnotherThing
], dispatch);
// ...
Saya suka menentukan nama pencipta saya secara eksplisit karena kesalahan apa pun segera ditangkap oleh eslint-plugin-import/namespace sebagai kesalahan.
Saya percaya ini adalah perubahan yang diperlukan:
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}. ` +
Saya pikir membuat bindActionCreator
lebih polimorfik akan terlalu banyak, bagaimana kalau membuat fungsi pembungkus yang melakukan ini untuk Anda?
function mapBindActionCreators(actions, dispatch) {
return actions.map(action => bindActionCreator(action, dispatch)
}
Jika Anda memiliki larik, Anda dapat reduce()
larik ke dalam objek dan meneruskannya ke bindActionCreator
Ya, saya pikir kami ingin menghindari mendukung setiap kemungkinan permutasi di sini.
Komentar yang paling membantu
Saya pikir membuat
bindActionCreator
lebih polimorfik akan terlalu banyak, bagaimana kalau membuat fungsi pembungkus yang melakukan ini untuk Anda?