antd outofdate 表单_antd使用复杂的动态表单时报错

在使用Ant Design(antd)库构建一个复杂的动态表单时,遇到'outofdate 表单'错误。表单数据结构包含多个组和字段,支持增删操作。在尝试动态新增组或字段时,注册Field时出现错误'You cannot set field before registering it.'。尝试通过form.setFieldsValue更新未注册的字段导致问题。解决方案需要确保在尝试设置值之前正确注册所有新增字段。
摘要由CSDN通过智能技术生成

数据的结构是这样的,需要用这个生成一个如下的表单

{

name: '', // 名称

groups: [ // 组

{

groupName: '', // 组名

state: 1, // 是否启用 1 启用 0 禁用

isOpen: 1, // 是否展开 1 展开 0 收起

fields: [ // 字段

{

fieldNameCn: '', // 字段中文名

tableName: '', // 表名

fieldName: '', // 字段在表中的名字

state: 1 // 是否启用 1 启用 0 禁用

}

]

}

]

}

f8ef0e302acc6d2dea6d393f279ed417.png

点击新增组按钮,给groups增加一条数据,点新增字段给groups[x].fields增加一条数据,删除的话反过来

现在循环出初始的表单,没问题,使用类似下面的方法来注册一个antd的field

{getFieldDecorator(`groups[${index}].groupName`, {})()}

现在点击新增的时候,使用下面的方法设置field会报You cannot set field before registering it.,因为我没有注册groups[1].groupName,因为是新增的,我不可能render遍历的时候就给它注册掉啊

appGroup = () = > {

const { form } = this.props;

const groups = form.getFieldValue('groups');

const group_empty = this.data_form_empty.groups[0]; // 这个不用管,就是个初始的对象

const key = `groups[${groups.length}]`

form.setFieldsValue({ // 这里就会报错 You cannot set field before registering it.

[key]: group_empty

});

}

也尝试过直接用getFieldDecorator注册一个groups,然后直接setFieldsValue整个groups。但是由于结构比较复杂,所以还会在getFieldDecorator的时候注册类似于groups[${index}].groupName这样的,这样就会报Warning: One field name cannot be part of another, e.g. a and a.b.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值