【发布时间】:2018-04-29 11:08:20
【问题描述】:
我正在尝试删除我所在州的数组中的一个对象。我想通过对地图函数中的项目使用 onclick 处理程序来做到这一点。
所以当我点击一个特定的项目时,我已经尝试了很多事情。我通过尝试从 map 函数中传递项目然后过滤掉数组(不包括作为参数提供的项目)来尝试过滤器函数,我尝试了 splice,但似乎都不起作用。使用拼接,它总是删除最后一个项目而不是我点击的项目。
我没看到什么?我知道有很多类似的问题,但我已经尝试了很多那里的答案,但似乎没有任何效果。
过滤尝试
JSX
{this.state.product.ingredients.map((item) => {
return (
<p className="text-xs text-white bg-brand rounded p-4 mt-2 mb-2 mr-2 inline-block cursor-pointer" key={item.name} onClick={({item}) => this.deleteTag({item})}>{item.name}</p>
);
})}
方法
deleteTag(item) {
let product = {...this.state.product};
product.ingredients.filter((ingredient) => {
return ingredient !== item;
});
this.setState({product: product});
}
拼接
JSX
{this.state.product.ingredients.map((item) => {
return (
<p className="text-xs text-white bg-brand rounded p-4 mt-2 mb-2 mr-2 inline-block cursor-pointer" key={item.name} onClick={this.deleteTag}>{item.name}</p>
);
})}
方法
deleteTag(e) {
let product = {...this.state.product};
var index = product.ingredients.indexOf(e.target.value)
product.ingredients.splice(index, 1);
this.setState({product: product});
}
具有一个对象的数组示例(对象/项与另一个函数一起添加)
ingredients: [{name: 'Salad', value: 1}],
【问题讨论】:
-
对于您的拼接,为什么
e不是item?将其记录到控制台会发现它不是您认为的那样。然后在数组中索引item
标签: javascript reactjs