我正在使用Redux和mapDispatchToProps
函数构建一个React应用程序 - 我使用下面的模式。
const mapDispatchToProps = (dispatch) => {
debugger
Object.keys(actions).forEach(key => {
var functionObj = actions[key];
actions[key] = () => {
debugger
var zz = Array.prototype.slice.call(arguments);
dispatch(functionObj.apply(null,zz));
}
});
return actions;
}
什么驱使我香蕉是争论对象是我期望它(数组像参数bla bla的对象)除非我"使用"它以任何方式。通过"使用"我的意思是:
将其分配给某些内容(如上面的var zz
)或将其传递给函数。当我"使用" arguments对象 - 它神奇地成为我目前所在的Webpack模块。
有人对此有所了解吗?我疯了吗?
答案 0 :(得分:4)
这是由箭头函数do not provide an arguments
object引起的。所以你引用了module wrapper function,这是最近的非箭头函数。
您可以使用rest parameters来解决此问题。好摆脱! Rest参数是一个真正的数组,不需要用任何Array#slice()无意义转换。
下面是一个示例,我还使用spread operator来避免使用Function#apply(),因为您似乎不需要任何特殊的this
值。< / p>
const mapDispatchToProps = (dispatch) => {
debugger
Object.keys(actions).forEach(key => {
var functionObj = actions[key];
actions[key] = (...zz) => {
debugger
dispatch(functionObj(...zz));
}
});
return actions;
}