2021-06-04

antd 使用 Transfer穿梭框 组件,如何限制选择的数量


Transfer穿梭框 组件的API中,官方文档中关于禁用的只看到disabled 的属性,这个 disabled 会使整个 Transfer 组件禁用,不是单个选项禁用,不满足我的需求
在这里插入图片描述
然后继续翻看文档,我看到了 renderonSelectChangerender是它的每行数据渲染函数,应该可以在里面控制它的 disabled,
onSelectChange 又满足同步用户选择的个数,
在这里插入图片描述


代码:

class TransferData extends Component {

	state = {
		initData: [],	//数据源
		targetKeys: [],	//已经确定到右边的 targetKeys

		sourceSelectedKeys: [],	//缓存左边勾选,但没确定到右边的 sourceSelectedKeys
	}
	
 	handleChange = values => {
   		this.setState({ targetKeys: values })
  	}

  	onSelectChange = sourceSelectedKeys => {
    	this.setState({ sourceSelectedKeys })
  	}

  	applyRecord = item => {
    	const { max_num } = this.props
    	if (max_num || max_num === 0) {
      		const { sourceSelectedKeys, targetKeys } = this.state
      		const list = targetKeys.concat(sourceSelectedKeys)
      		if (!list.some(i => i === item.key)) item.disabled = max_num <= list.length
      		/****
      		!list.some(i => i === item.key) 已经勾选的选不管确没确定,都不要禁用,不然会出现勾选到 max_num 个时,
      		会所有选项都被禁用,到时将无法使用
      		******/ 
    	}
    	return `${item.title}-${item.description}`
  }
  	
	render(){
	
	const { operations_right = '确定', operations_left = '取消' } = this.props
	
		return (
			<Transfer
        		dataSource={initData}
        		showSearch
        		listStyle={{
         		 width: 250,
          		height: 300,
        		}}
        		onSelectChange={sourceSelectedKeys => this.onSelectChange(sourceSelectedKeys)}
       			operations={[operations_right, operations_left]}
       		    targetKeys={targetKeys}
        		onChange={e => this.handleChange(e)}
        		render={record => this.applyRecord(record)}
      		/>
		)  
	}
}
  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值