对于每个组件,我都有一个名为actions.js
的动作创建者文件。在ComponentOne
中,我有:
let actions = {
logSaying() {
console.log("Hi there");
}
}
export default actions
然后我有一个主要的动作创建者文件,并尝试将所有动作放在一起,如下所示:
import componentOneActions from './ComponentOne/actions'
let actions = {
componentOneActions,
//componentTwoActions,
//etc.
}
export default actions
并将动作传递给主动作创建者表单中的所有组件:
import actions from './actions'
...
function mapDispatchToProps(dispatch) {
return {
actions: bindActionCreators(actions, dispatch)
}
}
但是当我尝试console.log()
时,没有任何行动被传下来。为什么不传递它,我如何形成一个动作创作者表?实际上有更好的方法吗?
提前感谢您,并将提出/接受答复。
答案 0 :(得分:0)
<强>更新强>
以前的答案是错误的。
也许您以错误的方式使用actions
。
从document开始,bindActionCreators(actionCreators, dispatch)
接受第一个参数actionCreators
。
而actionCreators
是一个像以下的对象:
function addTodo(text) {
return {
type: ADD_TODO,
text
}
}
http://redux.js.org/docs/basics/Actions.html#action-creators
因此,actions
并非actionCreators
。
您应该将console.log()
放在reducer中,并将actions
简单对象作为文档显示。
function todoApp(state = initialState, action) {
switch (action.type) {
case ADD_TODO:
console.log();
return {}
default:
return state
}
}
http://redux.js.org/docs/basics/Reducers.html#handling-more-actions
答案 1 :(得分:0)
不是componentOneActions
功能列表?所以你想使用spread syntax
:
let actions = {
...componentOneActions,
//...componentTwoActions,
//etc.
}
注意,在One和Two中使用相同的函数名称只会给出该名称的最后一个给定函数
答案 2 :(得分:0)
bindActionCreators()
期望绑定一系列动作函数。您传递的对象不是数组。尝试在对象上的每个操作数组上运行bindActionCreators
。
function mapDispatchToProps(dispatch) {
const keys = Object.keys(actions);
const mappedActions = {}
for (let i = 0; i < keys.length; i++) {
const key = keys[i];
mappedActions[key] = bindActionCreators(actions[key], dispatch)
}
return {
actions: mappedActions
}
}