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

时间:2019-02-16 08:33:49

标签: 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);
  } 
}

2 个答案:

答案 0 :(得分:1)

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

因此,使用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)}/>
  );
})
...

希望这会有所帮助!

答案 1 :(得分:0)

只需将var更改为let即可解决此问题。