javascript - 为什么在我使用箭头函数 onClick 时我的变量未定义?

标签 javascript reactjs components render arrow-functions

在我的 React 组件中,定义了 orders[i],因为该组件是使用名称和数量呈现的,但是,当涉及到 onClick 事件时,在箭头函数的上下文中未定义 orders[i]。我如何使用 orders[i].name 作为参数调用该函数?

let orders = this.state.orders;
let ordersRender =[];
for (var i=0; i<orders.length; i++) {
  if (orders[i].amount) {
    let newInvoiceItem = <InvoiceItem name={orders[i].name} amount ={orders[i].amount} key={i} handleDelete={() => this.deleteProduct(orders[i].name)}/>;
    ordersRender.push(newInvoiceItem);
  } 
}

最佳答案

handleDelete 事件触发时,变量 i 的值已更改为 orders.length,这就是为什么 orders[i ] 在触发 onClick 时未定义。

因此,使用 Array#map 而不是 for-loop遍历订单并返回 InvoiceItem 项目数组。由于 amount 是可选的,我们需要在应用 .map 函数之前根据金额过滤订单。

let { orders } = this.state;
let ordersRender = orders.filter(order => order.amount).map(({name, amount}, index) => {
  return (
    <InvoiceItem name={name} amount ={amount} key={index} handleDelete={() => this.deleteProduct(name)}/>
  );
})
...

希望这会有所帮助!

关于javascript - 为什么在我使用箭头函数 onClick 时我的变量未定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54721283/

相关文章:

javascript - Powerange - 通过 javascript 更改值

javascript - 在 React 中按 Enter 键时获取文本输入的状态

php - Symfony 组件应该如何添加 JavaScript 和 CSS

javascript - 如何在javascript中获取键a和 'a'的值

javascript - 如何使用 AngularJS 在 TreeView 中添加静态值?

javascript - 调用 Array.prototype.slice 时,新数组是否具有相同的原型(prototype)?

Angular2 如何清理 AppModule

reactjs - React 和 Jest - 使用 PropTypes.instanceOf 测试组件

javascript - 缩小/丑化我的应用程序

java - Swing ComponentListener.componentShown 未触发