繁体   English   中英

antd 4: 用defaultValue为Select设置默认值,不能使用initialValue

[英]antd 4: setting a default value for Select with defaultValue, can't use initialValue

在我们相当复杂的表单中,我们有一个动态表单字段(类似于 antd 文档中的示例,除了使用 Select 字段)。 我们使用 initialValue 从数据库中提供表单数据,现在我们希望动态添加的 Select 字段具有默认值。

问题在于,无法向尚未呈现的字段添加 initialValue + form 不知道将添加多少个动态 Select 字段。

因此,我本能地使用了 Select 框上的 defaultValue 属性,在我看来它应该可以正常工作,但它没有。 (在 antd 4 中没有带 defaultValue 的 fieldDescriptor)

也许这个例子会更好地解释我想说的: https : //codesandbox.io/s/thirsty-hamilton-m7bmc

如果您在示例中添加一个字段并点击提交,它会抱怨该字段是必需的。 然而,它确实在那里有一个值,但显然不是 Form 状态。

我希望其他人也遇到过类似的问题

您的 Select 组件需要定义VALUE 我看到您有 defaultValue,但他们还需要诸如VALUEONCHANGE 之类的属性。 当您添加它们时,选择将开始正常工作。

1)。 最好在 VALUE 属性中定义默认值,这样如果用户没有选择任何内容(所选值未定义),则该值将默认为您在以下条件中使用三元运算符提及的任何内容:

值={选定值? selectedValue:默认值}。

2)。 onChange属性中,您需要传递并使用该值更新状态:

onChange={(value) => this.updateSelectedValue(value)}

import React, { PureComponent } from "react";
import { Form, Select } from "antd";

const { Option } = Select;
export default class DynamicFieldSet extends PureComponent {
    state = {
        selectedValue: undefined,
    }

    updateSelectedValue = value => this.setState({ selectedValue: value })

    render() {
        const { selectedValue } = this.state;
        return (
            <Form>
                    <Form.Item>
                        <Select
                            value={selectedValue ? selectedValue : "TAG"}
                            onChange={(value) => this.updateSelectedValue(value)}
                        >
                            <Option value="MARKER">Marker</Option>
                            <Option value="TAG">Tag</Option>
                            <Option value="FIELD">Field</Option>
                        </Select>
                    </Form.Item>
            </Form>
          );
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM