gpt4 book ai didi

javascript - ANTD 动态表单 - 初始值

转载 作者:行者123 更新时间:2023-12-04 15:53:15 32 4
gpt4 key购买 nike

我在为 antd 动态表单设置初始值时遇到问题。有什么方法可以在动态中初始化值吗?它需要使用 getFieldDecorator 注册字段。但对于动态字段,该字段之前没有注册。

我收到这个错误:不能在注册之前设置字段。

代码:https://codesandbox.io/s/jnx3p1nz5

import React from "react";
import { Select, Icon, Button, Form, Input } from "antd";

const FormItem = Form.Item;
const TextArea = Input.TextArea;
const Option = Select.Option;

const SELECT = ['opt1', 'opt2'];

class TestForm extends React.Component {
state = {
listKeys: [0]
};

componentDidMount() {
const {
form: { setFieldsValue }
} = this.props;


// WORK
// setFieldsValue({
// name: 'test',
// });

// setFieldsValue({
// name: 'test',
// list: [
// {
// sub1: 'test1',
// sub2: 'test2',
// }
// ]
// });

// !!!!!!!!!!!! NOT WORK
// setFieldsValue({
// name: 'test',
// list: [
// {
// sub1: 'test1',
// sub2: 'opt2'
// },
// {
// sub1: 'test11',
// sub2: 'opt1'
// }
// ]
// });

setFieldsValue({
name: 'test',
list: [
{
sub1: 'test1',
sub2: 'opt2',
opt2sub: 'bla',
},
{
sub1: 'test11',
sub2: 'opt1'
},
{
sub1: 'test3',
sub2: 'opt2',
opt2sub: 'bla',
},
]
});
}

remove = k => {
const { listKeys } = this.state;

if (listKeys.length === 1) {
return;
}

this.setState({
listKeys: listKeys.filter(key => key !== k)
});
};

add = () => {
const { listKeys } = this.state;

this.setState({
listKeys: [...listKeys, listKeys.length]
});
};

render() {
const {
form: { getFieldDecorator, getFieldValue }
} = this.props;
const { listKeys } = this.state;

return (
<Form onSubmit={this.handleSubmit}>
<FormItem label="Name">
{getFieldDecorator("name")(<Input placeholder="name" />)}
</FormItem>
{listKeys.map((key, index) => {
const type = getFieldValue(`list[${key}].sub2`);

return (
<div key={key}>
<FormItem label="Sub1">
{getFieldDecorator(`list[${key}].sub1`)(
<Input placeholder="Sub1" />
)}
</FormItem>
<FormItem label="Sub2">
{getFieldDecorator(`list[${key}].sub2`,{
initialValue: 'opt1'
})(
<Select>
{SELECT.map(item => <Option key={item} value={item}>{item}</Option> )}
</Select>
)}
</FormItem>
{type === 'opt2' && (
<FormItem label="opt2sub">
{getFieldDecorator(`list[${key}].opt2sub`)(
<Input placeholder="opt2sub" />
)}
</FormItem>
)}
{index > 0 && (
<Icon
className="dynamic-delete-button"
type="minus-circle-o"
onClick={() => this.remove(key)}
/>
)}
</div>
);
})}
<FormItem>
<Button type="dashed" onClick={this.add}>
<Icon type="plus" />Add field
</Button>
</FormItem>
<FormItem>
<Button type="primary" htmlType="submit">
Submit
</Button>
</FormItem>
</Form>
);
}
}

export default Form.create()(TestForm);

最佳答案

您可以在持有表单的 Prop 中使用 forceRender={true} 来渲染它。我在抽屉里有一张表格。为此我有同样的错误。我在抽屉 Prop 中使用了 forceRender={true}。因此,无论哪个持有表单,您都需要使用 forceRender 呈现它。

关于javascript - ANTD 动态表单 - 初始值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53010545/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com