当前位置: 首页 > news >正文

使用Form.List且有Select组件

当在使用Form.List组件,且组件中有Select选项时,针对每一次选择,都要过滤掉那些已经选择过的选项,可能遇到的问题:
  1. 直接过滤会将每一个Select中的options选项都过滤掉,无法正常展示选择的选项

解决办法:

  1. 使用onChange,对选择的内容重新赋值,触发options的过滤函数

示例代码:

import { Form, Select, Button } from 'antd';
import { DeleteOutlined, PlusOutlined } from '@ant-design/icons';const options = [{value: 1,label: 'test1',},{value: 2,label: 'test2',},{value: 3,label: 'test',},
];const FormListSelect = () => {const [form] = Form.useForm();// onChangeconst handleChange = () => {const fieldsValue = form.getFieldsValue(); // 获取当前表单的值// 每一次赋值,都会触发optionsFilter函数自动执行,重新计算当前选择框的选项form.setFieldsValue({ ids: fieldsValue?.ids });};// 对选项进行过滤const optionsFilter = (index: number) => {console.log(index);const ids = form.getFieldValue('ids')?.filter((item) => !!item)?.map((item) => item?.id);ids.splice(index, 1);const fiterOptions = options.filter((item) => !ids.some((id: string) => item.value === id));return fiterOptions;};return (<Form form={form}><Form.List name="ids">{(fields, { add, remove }) => {return (<div>{fields.map(({ key, name, ...restField }) => {return (<div key={key} style={{ display: 'flex', gap: '20px' }}><Form.Item name={[name, 'id']} style={{ flex: 1 }}><Select{...restField}options={optionsFilter(name)}onChange={handleChange}/></Form.Item><ButtononClick={() => {remove(name);}}icon={<DeleteOutlined />}/></div>);})}<Form.Item><Buttontype="dashed"blockicon={<PlusOutlined />}onClick={() => {add();}}>新增</Button></Form.Item></div>);}}</Form.List></Form>);
};export default FormListSelect;

相关文章:

  • 交叉熵在机器学习中的应用解析
  • SQL Server 高可用集群(AOHA)数据库故障恢复
  • 宿舍管理系统(servlet+jsp)
  • 【Audio开发四】音频audio中underrun和overrun原因详解和解决方案
  • Vue工程化开发脚手架Vue CLI
  • 【从零实现高并发内存池】Central Cache从理解设计到全面实现
  • 人工智能应用开发中常见的 工具、框架、平台 的分类、详细介绍及对比
  • 大象机器人推出myCobot 280 RDK X5,携手地瓜机器人共建智能教育机
  • 2025年最新总结安全基础(面试题)
  • MySQL 缓存机制全解析:从磁盘 I/O 到性能优化
  • Vue 图标动态加载:Ant Design Vue 的 a-tree 图标实现与优化
  • 人工智能(机器人)通识实验室解决方案
  • vue3环境搭建、nodejs22.x安装、yarn 1全局安装、npm切换yarn 1、yarn 1 切换npm
  • 21.C++11
  • UWB定位技术面临的主要挑战
  • Anconda环境下修改Jupyter notebook的启动路径(Windows)
  • 人工智能应用开发的四种主流方法(提示工程、大模型微调、RAG、Agent)的详细对比分析
  • Jenkins插件下载慢解决办法
  • 超细的ollama下载以及本地部署deepseek项目
  • 【第三章】18-常用模块6-ngx_http_mirr_module
  • 国家核准10台核电新机组,四大核电央企披露新项目进展
  • AI应用大盘点:谁暴涨?谁掉队?
  • 财政部下达农业生产防灾救灾资金3.76亿元,支持黄淮海等地抗旱保春播
  • 央媒谈多地景区试水“免费开放”:盲目跟风会顾此失彼
  • 首映|马丽:真想抱抱臧姑娘,对她说辛苦了
  • 在县中,我看到“走出去”的渴望与“留下来”的惯性