Antd Select组件结合使用出现must set key for <rc-animate> children问题

本文分析了Ant Design中Select组件在设置为multiple或tags模式下,因默认值包含空字符串而导致的问题,并提供了两种解决方案:一是设置defaultValue为空数组,二是为initialValue指定有效的默认值。
一、以下情况可能导致错误发生

出现这个问题的首要条件是因为Select的mode 设置成multiple or tags

1. Select的defaultValue使用了空字符串

例如:

const emptyValue = ''
const emptyValueArr = ['1', '']
<Select
    mode="tags"
    defaultValue= emptyValue || emptyValueArr
>
    {
        [1, 2].map((item, index) => (
            <Option key={index} value={item}>{item}</Option>
        ))
    }
</Select>
2. 结合Form的initialValue包含空字符串
<FormItem {...formItemLayout} label="负责人">
    {getFieldDecorator('ownersAsList', {
        rules: [{
            required: true,
            message: '负责人不能为空'
        }],
        initialValue: ownersAsList || ['']
    })(
        <Select
            mode="tags"                                   
        >
            {
                ownersList.map((item, index) => (
                    <Option key={index} value={item}>{item}</Option>
                ))
            }
        </Select>
    )}
</FormItem>
二、解决办法
1. 如果你不需要默认值, 直接设置为空数组: defaultValue = []

注意: 空数组 != 含空字符串数组

<Select
    mode="tags"
    defaultValue = []
>
    {
        [1, 2].map((item, index) => (
            <Option key={index} value={item}>{item}</Option>
        ))
    }
</Select>
2. 如果希望有默认选中值: initialValue: ownersAsList || ['默认值']
<FormItem {...formItemLayout} label="负责人">
    {getFieldDecorator('ownersAsList', {
        rules: [{
            required: true,
            message: '负责人不能为空'
        }],
        initialValue: ownersAsList || ['默认值']
    })(
        <Select mode="tags" >
            {
                ownersList.map((item, index) => (
                    <Option key={index} value={item}>{item}</Option>
                ))
            }
        </Select>
    )}
</FormItem>

转载于:https://www.cnblogs.com/soyxiaobi/p/10001527.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值