javascript - 更新状态 onClick 事件中的每个项目
问题描述
我正在尝试通过单击按钮来更新状态中的每个项目。每个项目的初始状态为 FALSE (isSelected),如果用户在按钮类 div 上执行 onClick 事件,它应该将当前项目的状态 (isSelected) 更新为 TRUE,但我不知道如何完成此操作。
已编辑:每次点击它应该只更新一个项目,例如,如果我点击它的按钮ID: 1
,firsItem
它应该将isSelected
状态更改为true
仅适用于ID: 1
这是我的代码示例(我认为应该如何)
import React, { Component } from 'react'
export default class List extends Component {
constructor(props) {
super(props);
this.state = {
listItems: [{
name: 'firstItem',
itemOptionSelector: [{
id: 1,
isSelected: false
},
{
id: 2,
isSelected: false
},
{
id: 3,
isSelected: false
},
]
},
{
name: 'secondItem',
itemOptionSelector: [{
id: 1,
isSelected: false
},
{
id: 2,
isSelected: false
},
{
id: 3,
isSelected: false
},
]
}
]
}
}
selectItemClickHandler = () => {
this.setState({
listItems: [{itemOptionSelector: [{isSelected: true}]}]
})
}
render() {
const {listItems} = this.state
return (
<div>
{listItems.map(item => {
<div className="button" onClick={this.selectItemClickHandler}>{item.name}</div>
})}
</div>
)
}
}
解决方案
首先,尚不清楚您要做什么。您没有呈现您的“子项目”(或选项),因此目前无法知道应该将哪个选项更改为选定状态。
通常,您像这样更新数组状态:
state = {
items: [
{ isSelected: false, name: 'first' },
{ isSelected: false, name: 'second' },
{ isSelected: false, name: 'third' },
]
};
// ...
handleItemClick = (item, index) => {
const items = this.state.items.slice();
items[index] = { ...item, isSelected: !item.isSelected };
this.setState({ items });
};
render() {
return this.state.items.map((item, index) =>
<div onClick={() => this.handleItemClick(item, index)}>{item.name}</div>);
}
推荐阅读
- c++ - 修改 ELF 二进制文件以扩展数组大小
- c# - 在 HTML 操作链接中创建带有图标的按钮
- python - 检查多个文件之间重复数据的最有效方法是什么?
- sql - 如何创建顺序唯一的复合主键(id_x,id_y)?
- rest - REST:输入流和内存管理
- xamarin.forms - Prism.Forms 导航 - 在模态和非模态页面之间
- ios - 推送和呈现视图控制器
- javascript - 使用绑定时找不到 javascirpt
- regex - 如果后续行短于 X 个字符,则从文本文件中删除 CR
- node.js - 需要将 typescript 编译器 `tsc` 版本升级到 3.0