首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在Antd 4中使用setFieldsValue在Form.List中动态设置值?

在Antd 4中,可以使用setFieldsValue方法在Form.List中动态设置值。Form.List是Antd中用于处理动态表单项的组件,它可以根据数据动态生成表单项,并且可以通过setFieldsValue方法来设置表单项的值。

具体操作步骤如下:

  1. 首先,确保你已经正确引入了Antd的相关组件和样式。
  2. 在你的表单组件中,使用Form.List组件来处理动态表单项。例如:
代码语言:txt
复制
import { Form, Input, Button } from 'antd';

const DynamicForm = () => {
  const [form] = Form.useForm();

  const onFinish = (values) => {
    console.log('Form values:', values);
  };

  const setDynamicFieldValue = (index, value) => {
    const fieldsValue = form.getFieldsValue();
    const dynamicFieldsValue = fieldsValue.dynamicFields || [];
    dynamicFieldsValue[index] = value;
    form.setFieldsValue({ dynamicFields: dynamicFieldsValue });
  };

  return (
    <Form form={form} onFinish={onFinish}>
      <Form.List name="dynamicFields">
        {(fields, { add, remove }) => (
          <>
            {fields.map((field, index) => (
              <Form.Item
                key={field.key}
                label={`Field ${index + 1}`}
                name={[field.name]}
              >
                <Input
                  onChange={(e) => setDynamicFieldValue(index, e.target.value)}
                />
              </Form.Item>
            ))}
            <Form.Item>
              <Button type="dashed" onClick={() => add()} block>
                Add Field
              </Button>
            </Form.Item>
          </>
        )}
      </Form.List>
      <Form.Item>
        <Button type="primary" htmlType="submit">
          Submit
        </Button>
      </Form.Item>
    </Form>
  );
};

export default DynamicForm;
  1. 在上述代码中,我们使用了Form.List组件来处理动态表单项。在Form.List的render props函数中,我们可以通过fields参数获取到当前的表单项列表,并通过add和remove方法来添加和删除表单项。
  2. 在每个表单项的Input组件中,我们通过onChange事件来触发setDynamicFieldValue方法,该方法会根据当前表单项的索引和输入的值,动态更新表单项的值。
  3. 在setDynamicFieldValue方法中,我们首先通过form.getFieldsValue()获取到当前表单的所有字段值,然后获取到动态表单项的值dynamicFieldsValue。接着,我们根据当前表单项的索引index和输入的值value,更新dynamicFieldsValue数组中对应索引的值。最后,通过form.setFieldsValue方法将更新后的值重新设置给dynamicFields字段。

这样,当用户输入值时,表单项的值会动态更新。

关于Antd 4的更多使用方法和相关组件,你可以参考腾讯云Antd官方文档:Antd 4官方文档

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

antd3.x的form

最近在维护公司的台erp系统,项目中js库用的是react,ui库用的是antd。平时还是喜欢自己写css,刚开始还是有点不太习惯直接上ui库做项目,觉得用antd还是挺恶心的,主要是form。...而antd的form则出了一个类似v-model的类似方法。它不仅仅提供了双向绑定功能,而且它还具有校验,取值,赋值,重置,数据搜集,提交功能。...antd官网 双向绑定:getFieldDecorator 用法:该方法用在表单的子域里面,通过this.props.form.getFieldDecorator(id, options)进行使用,其中...}], })()} 虽然有双向绑定,但是某些时候,也会用到设置与获取值的方法,则会使用setFieldsValue,getFieldsValue...注意:要使用这些api,一定要把对应的 field 用 getFieldDecorator 进行注册。 设置setFieldsValue 通过setFieldsValue对其他控件进行赋值。

2.2K30

antd4与antd3Form表单设计区别

核心 antd3思想:使用HOC(高阶组件)包裹form表单,HOC组件的state存储所有的value,定义设置和获取值的方法 缺点:动一发牵全身,一个value改变,因为这是顶级状态,所以所有的子组件都会因父组件的重新...render而render,浪费了性能 antd4思想:使用Context 包裹form表单,自定义一个store类,存储所有的表单value,定义设置和获取值得方法,因为不是组件内部状态,需要自己定义更新函数...,每个Form.Item定义forceUpdate()强制更新函数,当我们setValue值得时候,根据name判断出要更新的Form.Item,可以调用该Item的更新函数更新,相比ant3节约了性能...React.forwardRef api, 把当前ref暴露给子组件,Form lib中导出前 Form/index文件可以看见包裹...== item); } } // 设置字段,接收一个对象 setFieldsValue = (newVal) => { this.store =

2K20
  • ​Ant Disign 4.0 升级实践扑街指南 (一)

    扑街第一步:antd4-codemod 运行 antd4-codemod src 控制台: 出师未捷身先死 问题不大, 我们老实人不怕这个。 缺少core-js, 那就装一个。...: { setFieldsValue } }) => { React.useEffect(() => { setFieldsValue({ username: 'Bamboo',...你每次确定的时候重置的其实都是上一次的, 所以不会变 偏右的回复: resetFields 是重置回 initialValues 的,并且 initialValues 只用于第一次初始化,不响应后续的变化...editors=0011 官网, 也找到了这样的描述: v3 版本,修改未操作的字段 initialValue 会同步更新字段,这是一个 BUG。...但是由于被长期作为一个 feature 使用,因而我们一直没有修复。 v4 ,该 BUG 已被修复。initialValue 只有初始化以及重置表单时生效。

    1.5K10

    React动态添加标签组件

    背景 在前端开发的过程,一些表单的输入经常需要输入多个内容,如果采用一个输入框+逗号分隔的方式,展示起来不是很清晰,一般需要采用标签的方式 需求 可以指定空状态时的标题 设置标签颜色 每个标签的最大长度...因为有多个标签,先定义一个变量来记录我们已经添加的标签 const [tags, setTags] = useState([]); // 待分隔列表 当鼠标输入框外部点击或者敲击回车的时候,都需要添加一个标签...给表单设置一下这个(用分隔标记拼接起来) 隐藏输入框 清空输入框 /* * 新增一个tag * */ const handleInputConfirm = () => { if (inputValue...Tooltip title={tag} key={tag}> {tagElem} ) : ( tagElem ); })} 删除标签 给Tag设置...join(separator) }); }; 编辑状态 当我们处于编辑状态的时候,打开表单后,它原本就有内容了 监听一下表单的内容,如果存在,则使用分隔标记分隔后塞入tags useEffect((

    44660

    antd表单设置数组字段

    使用React+ant design进行开发时通常使用Form组件,但是很多时候我们某一个字段是二维数组。...atom({ key: "article-list-option", default: { /** 发布人 管理员或者用户*/ auth: undefined, /** 设置正序还是倒序...article_id: undefined, /** 发布者ID*/ author_id: undefined, }, }); 但是表单每个item只对应了一个字段,怎么对多维数组的每个元素进行设置呢...仔细阅读文档后发现antd提供了一个list子组件来遍历多维数组。...开发只需要采取map对多维数组进行遍历即可: 通过索引进行条件渲染,或者定义一个数组使用map的index参数进行渲染,不在需要条件判断。使用field中提供的key也可以,也是索引

    2.4K20

    带你用React从零实现一个Antd4 Form表单

    前言 cms后台管理系统,大家一定绕不开对Form表单的使用,接下来我们就来详细解析下Antd4 Form的背后实现以及数据仓库的知识。...这个时候可以使用React跨层级数据传递Context。...那么现在我们其实要做的就是加上注册组件更新,监听this.store,一旦this.store的某个改变,就更新对应的组件。...,我们已经基本上实现了一个Antd4 Form表单~ 当然,如果你想到里结束也可以,如果还想再完美一点,请继续往下: 再完美一点~ 实现给表单预设 如果你很认真地敲这些代码,你可能会发现,测试例子里的预设并没有执行...实现这一的效果,函数组件可以使用useRef,类组件也可以使用React.createRef。

    1.3K20

    react模态框表单总结

    antd的表单操作比较细致,功能较多,我们工作中常用的无非增加内容的表单和编辑的表单,增加内容的表单初始化时,大部分默认为null的装填,偶尔有一些需要设置初始性别或者一些必选属性。...antd中提供了第二种模式,我们可以使用initvalue设置初始,此时表单初始化时会根据这个来初始化表单,所有初始化的操作都是根据这个。...还有就是表单提交时,是使用表单上form的事件,还是从form中提取值后提交,也是有选择的,前者可以用绑定form的form获取表单数据,后者可以绑定form的事件,前者的话数据验证再提交函数,后者的话可以根据...antd的框架特性formitem上设置rules来做校检,并且显示提示信息。...,这样做到功能隔离,谁的事情谁来做,而不是父组件定义好了再传递到子组件,这样增加了组件的耦合性。

    8110

    数栈技术文章分享:你居然是这样的initialValue

    ”value“,当我点击“更新value按钮”时,Input不更新。...Input组件没有设置value属性的话,就是一个非受控组件,它需要设置defaultValue,如果用户不手动改变Input的输入,那么Input就一直显示defaultValue指向的(友情提示:...用户手动更新表单数据,比如在组件手动输入,组件手动选择等等,在用户手动更新数据之后,initialValue的改变不会更新表单。 2....当执行了setFieldsValue方法之后,initialValue的改变不会更新表单。...下面的例子在生命周期函数componentDidMount执行了setFieldsValue方法,其他不变,你会发现不管怎么点击“重新获取数据按钮”,城市对应的都不会被更新,而总量对应的却一直更新

    1K10

    react 使用数据请求的时候和setState的时候哪个先处理

    今天在工作遇到一个问题,我司使用的是antd 组件,使用react数据请求时,并在其中设置setState,页面发现了异常....selectOnChange方法时,下面的调出人员也会随之发生变化, 问题来了:当我选择调出人员的一个下拉时: 如图 然后再去调用调出项目的selectOnChange事件,调出人员的位置变成了罗慧的value,...如图: 这什么原因,我们这边的前端说法是:两个异步的调用,一个异步请求,一个setState,当异步请求的时候,setState也是异步更改数据,当数据请求成功时,便遗留了上一个的value,这样的解释很牵强...我能提供的解决方案: 当调出项目selectOnChange的时候,调用一个同步的方法,把调出人员的select设为空.antd可以直接使用this.props.form.setFieldsValue

    1.1K50

    前端开发者必须知道的日常小技巧!

    使用CSS-in-JS,您可以将不同模块的样式定义同一个文件或同一个组件内,并以动态方式根据组件状态或其他条件应用它们。...( 一些元素()具有自己的默认宽度 ), 像下面这样: 当元素设置偏移后(left或right不为0),则会导致盒子溢出父盒子,致使整个页面出现滚动条: 此时可以用calc()计算确定盒子的宽度...一些元素()具有自己的默认宽度), 像下面这样: 当元素设置偏移后(left或right不为0),则会导致盒子溢出父盒子,致使整个页面出现滚动条: 此时可以用calc()计算确定盒子的宽度...Windows操作系统,可以通过“系统变量”和“用户变量”来设置环境变量。Linux或Unix系统,可以使用“export”命令来设置环境变量。...安装依赖: pnpm install cross-env 此时便可以package.json设置我们的环境变量: 此时控制台打印环境变量的,便可以看到环境变量被注入了: 20、使用vite-plugin-html

    26410

    前端开发者们,这些知识tips你必须知道

    使用CSS-in-JS,您可以将不同模块的样式定义同一个文件或同一个组件内,并以动态方式根据组件状态或其他条件应用它们。...( 一些元素()具有自己的默认宽度 ), 像下面这样: 当元素设置偏移后(left或right不为0),则会导致盒子溢出父盒子,致使整个页面出现滚动条: 此时可以用calc()计算确定盒子的宽度...一些元素()具有自己的默认宽度), 像下面这样: 当元素设置偏移后(left或right不为0),则会导致盒子溢出父盒子,致使整个页面出现滚动条: 此时可以用calc()计算确定盒子的宽度...Windows操作系统,可以通过“系统变量”和“用户变量”来设置环境变量。Linux或Unix系统,可以使用“export”命令来设置环境变量。...安装依赖: pnpm install cross-env 此时便可以package.json设置我们的环境变量: 此时控制台打印环境变量的,便可以看到环境变量被注入了: 20、使用vite-plugin-html

    46110

    结合Ant Design2.x总结在实际项目开发遇到的问题

    (前言)Form的适用场合 a.校验和提交 b.数据收集/存数据 没有分步提交的情况下,使用Form是保存页面现有数据最简单最直接的方法 举例: ?...values); }) 看到图片右边Form已经帮我们把已键值对的形式保存起来了,key是你使用Form时通过getFieldDecorator 方法与表单进行双向绑定时的参数id,详见ant文档的...另一种是给数组的每一项都增加一个flow_flag作为这一项的唯一id,例如:点击add时,向数组push一条初始数据时同时将flow_flag push进去, 这种方法“1对1”“1对n”删都可以...如何实现一个受控选择的树和遇到的问题及解决方法 项目需要一个这样的树: 每一个树节点都代表的是一个职级,所以子节点全选中不代表父节点选中,父节点选中代表子节点全选中,这个时候Antd的树组件就不满足我们项目的需求了...(写时遇到的坑)写这样受控的树时不要用Form了,因为勾选时想给自己setFiledValue是不支持的,上网查是因为 “antdform表单的setFieldsValue只能设置其他域的,不能控制自己表单域的

    1K20

    Angular实战之使用NG-ZORRO创建一个企业级后台框架(新手入门篇)

    前言:   之前的一篇文章已经介绍过了,公司正在使用NG-ZORRO组件库开发后台应用,并且详细的介绍了Angular开发环境的搭建和项目的创建。...这篇文章就是为了让大家熟悉了解我们该如何在Angular项目中使用到NG-ZORRO UI组件库搭建后台管理框架。...启用图标动态加载):y set up custom theme file(设置自定义主题文件):y choose your locale code(选择区域设置代码):ZH-CN choose template...引入样式: angular.json 引入: { "styles": [ "node_modules/ng-zorro-antd/ng-zorro-antd.min.css" ]...} style.css 引入css样式文件: @import "~ng-zorro-antd/ng-zorro-antd.min.css"; style.less 引入 less 样式文件:

    3.5K11
    领券