动态渲染复选框和处理变化事件:React+Typescript
Dynamically render checkboxes and handle change events: React+Typescript
我正在创建基于对象数组的动态复选框,但我无法为相同的对象设置更改处理程序。我正在使用 semantic-ui-react 复选框。如何处理相应更改复选框的更改事件。
还有一个提交按钮,我需要获取已检查的项目。有人可以帮我解决这个问题
不胜感激
复选框渲染代码
let arr = [ {key: "Pending", text: "Pending", checked: false}
{key: "Approved", text: "Approved", checked: false}
{key: "Cancelled", text: "Cancelled", checked: false}
];
this.state ={ optionsArr: [] }
{this.state.arr.map((item: any, i: number) => (
<div className="menu-item" key={i}>
<Checkbox
name={item.text}
onChange={this.handleItemClick}
checked={item.checked}
label={item.text}
/>
</div>
))}
更改处理程序
handleItemClick = (event: React.FormEvent<HTMLInputElement>, data: any) => {
const i = this.state.optionsArr.findIndex(
(item: any) => item.text === data.name
);
const optionsArr = this.state.optionsArr.map((prevState: any, si: any) =>
si === i ? !prevState : prevState
);
this.setState({ optionsArr });
};
认为您在尝试更新选项数组的状态时返回了错误的内容。
prevState
是一个对象,就像 {key: 'string', text: 'string', checked: boolean}
,所以做 !prevState
没有意义。
尝试:
handleItemClick = (event: React.FormEvent<HTMLInputElement>, data: any) => {
const i = this.state.optionsArr.findIndex(
(item: any) => item.text === data.name
);
const optionsArr = this.state.optionsArr.map((prevState: any, si: any) =>
si === i ? {...prevState, checked: !prevstate.checked} : prevState
);
this.setState({ optionsArr });
};
您可以使用过滤器获取选中的项目:
this.state.optionsArr.filter((item: any) => item.checked)
我正在创建基于对象数组的动态复选框,但我无法为相同的对象设置更改处理程序。我正在使用 semantic-ui-react 复选框。如何处理相应更改复选框的更改事件。
还有一个提交按钮,我需要获取已检查的项目。有人可以帮我解决这个问题
不胜感激
复选框渲染代码
let arr = [ {key: "Pending", text: "Pending", checked: false}
{key: "Approved", text: "Approved", checked: false}
{key: "Cancelled", text: "Cancelled", checked: false}
];
this.state ={ optionsArr: [] }
{this.state.arr.map((item: any, i: number) => (
<div className="menu-item" key={i}>
<Checkbox
name={item.text}
onChange={this.handleItemClick}
checked={item.checked}
label={item.text}
/>
</div>
))}
更改处理程序
handleItemClick = (event: React.FormEvent<HTMLInputElement>, data: any) => {
const i = this.state.optionsArr.findIndex(
(item: any) => item.text === data.name
);
const optionsArr = this.state.optionsArr.map((prevState: any, si: any) =>
si === i ? !prevState : prevState
);
this.setState({ optionsArr });
};
认为您在尝试更新选项数组的状态时返回了错误的内容。
prevState
是一个对象,就像 {key: 'string', text: 'string', checked: boolean}
,所以做 !prevState
没有意义。
尝试:
handleItemClick = (event: React.FormEvent<HTMLInputElement>, data: any) => {
const i = this.state.optionsArr.findIndex(
(item: any) => item.text === data.name
);
const optionsArr = this.state.optionsArr.map((prevState: any, si: any) =>
si === i ? {...prevState, checked: !prevstate.checked} : prevState
);
this.setState({ optionsArr });
};
您可以使用过滤器获取选中的项目:
this.state.optionsArr.filter((item: any) => item.checked)