antd react form.list动态增减表单项Switch受控

javascript 复制代码
import React, { useState } from 'react';
import { Form, Input, Switch, Button } from 'antd';
 
const Demo = () => {
  const [switches, setSwitches] = useState({});
 
  const onFinish = (values) => {
    console.log('Received values of form: ', values);
  };
 
  return (
    <Form
      name="dynamic_form_item"
      onFinish={onFinish}
      autoComplete="off"
    >
      <Form.List name="list">
        {(fields, { add, remove }) => (
          <>
            {fields.map((field, index) => (
              <Form.Item
                {...field}
                name={[field.name]}
                key={field.key}
                fieldKey={field.fieldKey}
              >
                <Input placeholder="Input number" />
                <Switch
                  checked={switches[field.name]}
                  onChange={(checked) => {
                    setSwitches({ ...switches, [field.name]: checked });
                  }}
                />
                {fields.length > 1 ? (
                  <Button
                    onClick={() => {
                      remove(field.name);
                      setSwitches({ ...switches, [field.name]: undefined });
                    }}
                  >
                    Delete
                  </Button>
                ) : null}
              </Form.Item>
            ))}
            <Form.Item>
              <Button type="dashed" onClick={() => add()}>
                <PlusOutlined /> Add field
              </Button>
            </Form.Item>
          </>
        )}
      </Form.List>
      <Form.Item>
        <Button type="primary" htmlType="submit">
          Submit
        </Button>
      </Form.Item>
    </Form>
  );
};
 
export default Demo;

这个代码示例展示了如何使用Ant Design的Form和Form.List组件来创建一个可动态增减表单项的表单,并且每个表单项旁边都有一个Switch组件,这些Switch组件是受控的,即它们的状态会被保存在组件的状态中。当用户提交表单时,表单的数据以及Switch的状态都会被打印出来。

相关推荐
尾善爱看海9 小时前
Vue 面试收官篇:SSR、性能优化落地、30 道高频面试题精讲(附标准答案)
前端·javascript·vue.js·面试·vue
李明卫杭州13 小时前
React 复合事件系统对比解析
前端·javascript·react.js
LEE15 小时前
前端转型全栈 01:数据建模,前端最大的盲区
前端·javascript·后端
雪芽蓝域zzs15 小时前
第四十七节:驾驶舱大屏 ECharts 图表集成
前端·javascript·vue.js
梦醒沉醉16 小时前
7、表达日期和时间(前朝遗老Date)
javascript
白雾茫茫丶16 小时前
Vibecoding 一个主题切换动画库:13 种揭幕方式
前端·vue.js·react.js
雪芽蓝域zzs16 小时前
第四十九节:TagsView 右键菜单(带三角箭头)给每个 tag 增加**鼠标右键菜单**(右键标签弹出:关闭、关闭其他、关闭全部)
前端·javascript·vue.js
এ慕ོ冬℘゜17 小时前
从零开发移动端医院挂号页面:适配、交互与前端实现详解
前端·javascript
宁渡AI大模型17 小时前
AI 全栈面试新趋势:Vibe Coding、前端、Java 后端高频面试题深度解析|河南宁渡科技有限公司编程教程
java·javascript·人工智能·python·ai大模型
东风微鸣17 小时前
AI依赖更新别裸奔🚨
javascript