reactjs 在react中处理多个输入复选框

t1qtbnec  于 2023-10-17  发布在  React
关注(0)|答案(2)|浏览(130)

我有这样的数据:

  1. const [purchaseTypes, setPurchaseTypes] = useState([]);
  2. const purchaseInitData = [
  3. { id: 1, name: 'liveType', purchaseType: 'liveType', label: 'purchase live training' },
  4. { id: 2, name: 'courseType', purchaseType: 'courseType', label: 'purchase course videos'}];

输入复选框:

  1. {purchaseData.map((item, index) => {
  2. return (
  3. <div className="flex items-center mb-2" key={index}>
  4. <input type="checkbox" id={item.id} name={item.name} onChange={(e) => handleOnChange(e, index)} />
  5. <label htmlFor={`custom-checkbox-${index}`} style={{ marginLeft: '15px' }}>{item.label}</label>
  6. </div>
  7. )
  8. })}
  9. const handleOnChange = (e, i) => {
  10. const newData = [...purchaseData];
  11. const { checked } = e.target;
  12. if (checked) {
  13. setPurchaseTypes((prev) => [...prev, newData[i]]);
  14. } else {
  15. setPurchaseTypes(newData.splice(i, 1));
  16. }
  17. }

我可以将数据设置为状态,但在取消选中时无法删除最后一个状态

wooyq4lh

wooyq4lh1#

你提供的代码片段不是很清楚。您的代码中是否也有purchaseTypes状态?你想展示什么,购买数据吗?但是,它没有在代码中初始化或设置。如果你能把你的全部代码都贴出来,那就太好了。

lp0sw83n

lp0sw83n2#

我用filter解决了这个问题:

  1. const handleOnChange = (e, i) => {
  2. const { checked, id } = e.target;
  3. if (checked) {
  4. setPurchaseTypes([...purchaseTypes, purchaseData[i]]);
  5. } else {
  6. setPurchaseTypes((prev) => prev.filter((item) => {
  7. return item.id !== parseInt(id)
  8. }))
  9. }
  10. }

相关问题