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

Antd中使用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.mrgr.cn/news/98642.html

相关文章:

  • Linux 软件管理
  • Linux:解决 yum 官方源无法使用(CentOS 7)
  • 51c自动驾驶~合集17
  • 从单模态到多模态:五大模型架构演进与技术介绍
  • 使用 Azure AKS 保护 Kubernetes 部署的综合指南
  • Docker 中启动 Nginx 容器
  • 宇瞳杯视讯镜头完成版(除公差/鬼像分析)
  • helm的go模板语法学习
  • 【星海随笔】Python-JSON数据的处理
  • GKI 介绍
  • Elasticsearch 查询排序报错总结
  • 一次现网问题定位-慢接口告警
  • Go:包和 go 工具
  • Linux:Makefile
  • Kubernetes 节点摘除指南
  • C#: 用Libreoffice实现Word文件转PDF
  • 七、Linux基础day02--Linux命令02
  • chapter32_SpringMVC与DispatcherServlet
  • 来个去照片背景的GUI程序
  • 毛笔书体检测-hog+svm python opencv源码