我正在使用 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
)或将其传递给函数。当我“使用”参数对象时 - 它神奇地变成了我当前所在的当前 Webpack 模块。
有人知道这件事吗?我疯了吗?
最佳答案
这是由于箭头函数 do not provide an arguments
object 造成的。所以您引用的是 module wrapper function ,这是最接近的非箭头函数。
您可以使用 rest parameters 来修复此问题反而。骑得好!剩余参数是一个真正的数组,不需要用任何转换 Array#slice()废话。
下面是一个示例,我还使用了 spread operator以避免需要使用 Function#apply() ,因为您似乎不需要任何特殊的 this
值。
const mapDispatchToProps = (dispatch) => {
debugger
Object.keys(actions).forEach(key => {
var functionObj = actions[key];
actions[key] = (...zz) => {
debugger
dispatch(functionObj(...zz));
}
});
return actions;
}
关于Javascript函数Arguments对象神奇变成当前webpack模块?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41623574/