为什么在我使用箭头函数 onClick 时我的变量未定义?
Why my variable is undefined when I'm using an arrow function onClick?
在我的 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
被触发时未定义的原因.
因此,不使用 for-loop
,而是使用 Array#map 遍历订单和 return 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)}/>
);
})
...
希望这会有所帮助!
只需将 var 更改为 let 即可解决此问题。
在我的 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
被触发时未定义的原因.
因此,不使用 for-loop
,而是使用 Array#map 遍历订单和 return 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)}/>
);
})
...
希望这会有所帮助!
只需将 var 更改为 let 即可解决此问题。