You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
52 lines
1.9 KiB
52 lines
1.9 KiB
import { kindOf } from './utils/kindOf' |
|
|
|
function bindActionCreator(actionCreator, dispatch) { |
|
return function () { |
|
return dispatch(actionCreator.apply(this, arguments)) |
|
} |
|
} |
|
|
|
/** |
|
* Turns an object whose values are action creators, into an object with the |
|
* same keys, but with every function wrapped into a `dispatch` call so they |
|
* may be invoked directly. This is just a convenience method, as you can call |
|
* `store.dispatch(MyActionCreators.doSomething())` yourself just fine. |
|
* |
|
* For convenience, you can also pass an action creator as the first argument, |
|
* and get a dispatch wrapped function in return. |
|
* |
|
* @param {Function|Object} actionCreators An object whose values are action |
|
* creator functions. One handy way to obtain it is to use ES6 `import * as` |
|
* syntax. You may also pass a single function. |
|
* |
|
* @param {Function} dispatch The `dispatch` function available on your Redux |
|
* store. |
|
* |
|
* @returns {Function|Object} The object mimicking the original object, but with |
|
* every action creator wrapped into the `dispatch` call. If you passed a |
|
* function as `actionCreators`, the return value will also be a single |
|
* function. |
|
*/ |
|
export default function bindActionCreators(actionCreators, dispatch) { |
|
if (typeof actionCreators === 'function') { |
|
return bindActionCreator(actionCreators, dispatch) |
|
} |
|
|
|
if (typeof actionCreators !== 'object' || actionCreators === null) { |
|
throw new Error( |
|
`bindActionCreators expected an object or a function, but instead received: '${kindOf( |
|
actionCreators |
|
)}'. ` + |
|
`Did you write "import ActionCreators from" instead of "import * as ActionCreators from"?` |
|
) |
|
} |
|
|
|
const boundActionCreators = {} |
|
for (const key in actionCreators) { |
|
const actionCreator = actionCreators[key] |
|
if (typeof actionCreator === 'function') { |
|
boundActionCreators[key] = bindActionCreator(actionCreator, dispatch) |
|
} |
|
} |
|
return boundActionCreators |
|
}
|
|
|