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的状态都会被打印出来。

相关推荐
FungLeo7 分钟前
成为全栈·Vue 管理后台篇·Vue Router如何守住多角色后台边界
前端·javascript·vue.js·rbac·vue router·路由守卫·前端权限
FungLeo1 小时前
成为全栈·Vue管理后台篇·仪表盘不是几张卡片:组合统计接口与角色视图
前端·javascript·vue.js·rbac·仪表盘·管理后台·tanstack query
程序员大阳1 小时前
HTML+CSS+JS对话式实战(7)-学生端活动报名功能开发
javascript·css·html·活动报名
wo_jack1 小时前
C++ 入门笔记(十七):list 入门 —— 为什么 list 不能 sort?
数据结构·c++·面试·stl·list
西安小哥2 小时前
做 Agent 写到第三个小时,我开始给它算账
javascript
西安小哥2 小时前
让大模型操作浏览器跑了两周,我发现瓶颈根本不在模型
javascript
用户298698530142 小时前
用 Python 自动化把 JavaScript 代码转换为 Word 文档
javascript·python·api
学以智用2 小时前
正则表达式完整参考手册(JavaScript 版,兼容绝大多数语言)
javascript
北城笑笑2 小时前
Vue 109 ,从零搭建 Vue3 + Electron 工程:生态、安全桥接与打包选型( Vue + Electron )
前端·javascript·vue.js·安全·electron·vue
Highcharts.js3 小时前
Highcharts智能数据分析平台Orbit 多语言配置技术文档
java·前端·javascript·highcharts·orbit·智能数据分析·设置文档