javascript - 如何使用复选框向数组添加/删除项目?
问题描述
我正在从 api 获取项目,然后使用复选框将它们显示给用户。当用户点击一个项目时,项目的值应该被添加到用户的项目数组中。同样通过取消选中它,它应该从数组中删除......
我知道复选框、状态和数组背后的逻辑,但是我根本无法理解我的代码中出了什么问题。我的代码确实将项目添加到用户的数组但是当我尝试取消选中该项目时,除了单击的项目之外的所有项目都被删除......
class StepThree extends Component {
constructor(props) {
super(props);
this.state = {
selectedItems: []
};
};
handleCheckbox = e => {
let { selectedItems } = this.state;
const item = e.target.name;
if (selectedItems.includes(item)) {
const index = selectedItems.indexOf(item);
this.setState({ selectedItems: selectedItems.splice(index, 1)});
} else {
selectedItems = selectedItems.concat(item);
this.setState({ selectedItems: selectedItems });
}
};
render() {
const { categories } = this.props;
const { selectedItems } = this.state;
return (
<Content>
{categories.map(item => (
<label key={item.name}>
{item.name}
<Checkbox
name={item.name}
checked={selectedItems.includes(item.name)}
onChange={this.handleCheckbox}
/>
</label>
))}
</Content>
);
}
}
注意:对于代码的一个非常糟糕的示例,我很抱歉,我仍然是一种新的反应。但是,如果您有任何其他提示,请提出建议。
解决方案
.splice() 将返回从数组中删除的项目。
如果您调用它,它将起作用,然后设置 selectedItems 状态:
if (selectedItems.includes(item)) {
const index = selectedItems.indexOf(item);
selectedItems.splice(index, 1);
this.setState({ selectedItems });
}
推荐阅读
- xamarin - Xamarin Realm DB 删除所有记录
- python - TensorFlow 中 tf.GradientTape 的急切执行错误
- go - 在 Golang 中使用参数测试 URL
- react-native - 带有 react-native (expo) 的 babel-relay-plugin 抛出关于 'cypto' 的错误
- python - 如何使用 python pptx 复制 PowerPoint 幻灯片?
- python - Pandas 有条件的滚动总和
- vuejs2 - 使用组件(尤其是嵌套)时属性、数据和计算值的混淆
- r - 如何在 R 中处理 netCDF 数据,以便从月度数据中找到年平均温度?
- html - 如何正确定义 onClick 事件?
- amazon-web-services - AWS 状态机 ASL:仅在返回数据时使用结果选择器