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

相关推荐
灵感__idea7 小时前
Hello 算法:贪心的世界
前端·javascript·算法
killerbasd10 小时前
牧苏苏传 我不装了 4/7
前端·javascript·vue.js
橘子编程11 小时前
JavaScript与TypeScript终极指南
javascript·ubuntu·typescript
叫我一声阿雷吧11 小时前
JS 入门通关手册(45):浏览器渲染原理与重绘重排(性能优化核心,面试必考
javascript·前端面试·前端性能优化·浏览器渲染·浏览器渲染原理,重排重绘·reflow·repaint
大家的林语冰12 小时前
《前端周刊》尤大开源 Vite+ 全家桶,前端工业革命启动;尤大爆料 Void 云服务新产品,Vite 进军全栈开发;ECMA 源码映射规范......
前端·javascript·vue.js
jiayong2312 小时前
第 8 课:开始引入组合式函数
前端·javascript·学习
天若有情67313 小时前
【C++原创开源】formort.h:一行头文件,实现比JS模板字符串更爽的链式拼接+响应式变量
开发语言·javascript·c++·git·github·开源项目·模版字符串
软件工程师文艺13 小时前
从0到1:Claude Code如何用React构建CLI应用
前端·react.js·前端框架
M ? A13 小时前
Vue 迁移 React 实战:VuReact 一键自动化转换方案
前端·vue.js·经验分享·react.js·开源·自动化·vureact
yuki_uix13 小时前
重排、重绘与合成——浏览器渲染性能的底层逻辑
前端·javascript·面试