Javascript函数Arguments对象神奇变成当前webpack模块?

标签 javascript reactjs webpack redux react-redux

我正在使用 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/

相关文章:

javascript - Webpack 4 中 css-loader 的 importLoaders 选项到底是什么?

javascript - 使用 Webpack、Node、Express、React、React-Router 时的文件大小

javascript - 从 Canvas 合成创建图像

reactjs - 在 Material-UI v5 中,我应该更喜欢 css Prop 而不是 sx Prop ,反之亦然?

javascript - 无限滚动React组件仅在向下滚动时加载一个新的对象切片,然后停止

reactjs - 动态路由在使用 Next.js 刷新页面时不起作用

css - webpack2 : how to import Bootstrap CSS for react-bootstrap to find its styles?

javascript - 防止浏览器跳转到 anchor

javascript - 悬停时重绘 HTML5 Canvas Arc

javascript - 使 Webpack 在索引以外的文件中渲染