当前位置: 首页 > 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;

http://www.dtcms.com/a/134403.html

相关文章:

  • 交叉熵在机器学习中的应用解析
  • 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
  • CExercise_13_1排序算法_2归并排序
  • 基于EasyX库开发的球球大作战游戏
  • 银河麒麟(Kylin) - V10 SP1桌面操作系统ARM64编译QT-5.15.12版本
  • 2025年国企社招欧治链金再生资源入职测评笔试中智赛码平台SHL测试平台Verify认知能力测试
  • linux-设置每次ssh登录服务器的时候提醒多久需要修改密码
  • MCP调用示例-GitHub仓库操作
  • c++解决动态规划
  • 【16】数据结构之基于树的排序算法篇章
  • 行业深度:金融数据治理中的 SQL2API 应用创新
  • Google政策大更新:影响金融,新闻,社交等所有类别App