2

我正在尝试使用 ant-design 呈现复选框默认值。

这是我要渲染的数据

plainOptions: [
    {
        name: "apple",
        is_enabled: "true",
    },
    {
        name: "orange",
        is_enabled: "true"
    },
    {
        name: "banana",
        is_enabled: "true"      
    },
    {
        name: "grape",
        is_enabled: "false",
    },
]

这是组件:

                    <FormItemRow>
                        <Col span={24} style={colStyle}>
                            <FormItem label={'fruits'} colon={ false } style={{ marginBottom: 0 }}> 
                                <CheckboxGroup options={plainOptions} defaultValue={['true']}>
                                    {plainOptions.map(option => {
                                        return (
                                            <Checkbox key={option.label}>{option.label}</Checkbox>
                                        )
                                    })}
                                </CheckboxGroup>
                            </FormItem>
                        </Col>
                        </FormItemRow>

我得到了我想看到的结果,但是在 CheckboxGroup 组件中使用 defaultValue 的问题是收到警告说

Warning: Encountered two children with the same key, `true`. Keys should be unique so that components maintain their identity across updates. Non-unique keys may cause children to be duplicated and/or omitted — the behavior is unsupported and could change in a future version.

似乎 defaultValue 就像key一样工作。

我还在Check组件中添加了检查并分配了布尔值,但它也不起作用。

如何在没有警告标志的情况下安全地在复选框内呈现默认值?

4

2 回答 2

2

我实际上认为,关键错误来自您使用option.label而不是option.name. (在这种情况下应该是未定义的)

您必须区分valuecheckedvalue是内容,如果选中复选框,将返回该内容。

如果您定义了一个值,但未选中该复选框,则无论如何它都不会发送。

也许将复选框变成一个受控输入(意思是:你有一个 onChange 事件,它会触发一个选中状态)并在 prop.is_enabled 中传递你的 is_enabled 值checked

<Checkbox key={option.name} checked={this.state.options[optionKey].is_enabled}>{option.name}</Checkbox>
于 2019-08-27T02:58:40.463 回答
2

首先,您使用option.label了而不是option.name,它为所有键提供了 undefined ,这就是您收到相同键警告的原因。

<Checkbox key={option.name}>{option.name}</Checkbox>

如果您使用CheckboxGroup,则不需要使用Checkbox。你可以CheckboxGroup这样使用...

this.state = {
 plainOptions: ["apple", "orange", "banana", "grape"],
 checkedList: ["apple", "banana"] // Default Value
};

您将获得值数组作为 onChange 事件的参数

onChange = (checkedList) => {
  this.setState({ checkedList });
}
<CheckboxGroup
  options={this.state.plainOptions}
  value={this.state.checkedList}
  onChange={this.onChange}
/>

在上面的示例中,我使用checkedList初始状态作为默认值,并在 onChange 事件上分配最新状态。

于 2019-08-27T05:48:22.363 回答