React+antd 限制antd的TreeSelect选择个数

7 篇文章 0 订阅

项目中提到的一个需求,限制TreeSelect的选择个数,例如选择国家,最多只能选择三个。
想到的办法有好几个,例如在选择的时候判断已选择的个数,如果有三个了就将TreeSelect的disabled设为true,但是这个方法会导致不能修改,例如想换一个国家,控制起来反反复复比较麻烦。
后来找到一个其他方法,在一个文章里看到的,作者忘记了(抱歉);

先把最优解决办法放上来吧。
Form表单有一个validator方法,此方法可以获取到TreeSelect已经选择的值以及长度

<Col {...ColLayout}>
    <Form.Item label="国家地区" {...formItemLayout}>
        {getFieldDecorator("gjid", {
            initialValue: data && data.gjid ? data.gjid.split(',') : [],
            rules: [
                { 
	                required: true, 
	                message: '请选择国家地区', 
	                validator: this.changeValues , //此行为重要方法!!!!!!!!!!!
                }
            ]
        })(
            <TreeSelect
                style={{ width: '100%' }}
                treeData={country}
                placeholder="请选择"
                treeNodeFilterProp="title"
                multiple
                showSearch
                onChange={this.changeGJ}
            // disabled={gjDisabled}
            />
        )}
    </Form.Item>
</Col>
changeValues = (rule, value, callback) => {
        const { setFieldsValue } = this.props.form;
        let newArr; //定义一个空数组,将超过三个后截取的值赋给form
        //判断如果值超过三个
       if (value.length > 3) {
       		//如果超过三个,那么就使用slice截取,只取前三个
            newArr = [].concat(value.slice(0, 3));
            //将截取后的值赋给form表单内的gjid
            setFieldsValue({
                "gjid": newArr,
            })
            //并给出提示
            message.warning('最多选择三个国家!')
        } else {
            newArr = value;
            callback()
        }
    }

记录下这篇文章的时候突然想到,在onChange事件里面使用这样的方法是不是也可以呢,这就去试一下,在onChange事件里面判断长度然后截取。
但是Form表单的这个validator方法之前没有见过,还是好神奇。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值