当前位置:   article > 正文

React+Ant :循环表单中的选择框,实现选择一个选项后,其余的选择框禁用该选项_react一个按钮勾选 其他就不会被勾选

react一个按钮勾选 其他就不会被勾选

 实现方法:

思路就是在选择框的onChange事件中,将已经选中的值存储到一个state中。然后对于每个选择框,在渲染时判断该选择框的选项是否在已选中的值中,如果是,则禁用该选项。

对于删除操作,可以在Form.List的remove方法中将已经删除的值从已选中的值中移除,以恢复该选项的可选状态。

代码如下:

  1. // 在组件中定义已选中的值的state
  2. const [selectedValues, setSelectedValues] = useState([]);
  3. // 处理选择框的onChange事件
  4. const handleSelectChange = (value, index) => {
  5. const newSelectedValues = [...selectedValues];
  6. newSelectedValues[index] = value;
  7. setSelectedValues(newSelectedValues);
  8. };
  9. <Form.List name="detailList">
  10. {(fields, { add, remove }) => (
  11. <>
  12. {/* 省略其他表单组件 */}
  13. {fields.map(({ key, name, fieldKey, ...restField }, index) => (
  14. <Form.Item {...restField} label="规格" name={[name, 'norms']}>
  15. <Select
  16. placeholder="请选择"
  17. onChange={value => handleSelectChange(value, index)}
  18. disabled={selectedValues.includes(restField.value) &&
  19. selectedValues.indexOf(restField.value) !== index}
  20. // 判断该选项是否已选中,如果是,则禁用该选项
  21. >
  22. {optionsList.map((item) => (
  23. <Option key={item.id} value={item.id}>
  24. {item.name}
  25. </Option>
  26. ))}
  27. </Select>
  28. </Form.Item>
  29. {/* 省略其他表单组件 */}
  30. {fields.length > 1 && (
  31. <Button type="link" onClick={() => {
  32. remove(name);
  33. const newSelectedValues = [...selectedOptions];
  34. newSelectedValues.splice(index, 1);
  35. setSelectOptions(newSelectedValues);
  36. }}
  37. >
  38. 删除
  39. </Button>
  40. )}
  41. ))}
  42. </>
  43. )}
  44. </Form.List>

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/115599
推荐阅读
相关标签
  

闽ICP备14008679号