Antd的Transfer穿梭框Tree树穿梭框搜索筛选数据

antd的官方示例demo中有普通的transfer按照条件筛选数据,只需要添加API参数:showSearch,但是在Tree树穿梭框中会失效,并不能筛选出,而官方实例也没有给出解决示例,这里给出一个解决方法

查看API:
在这里插入图片描述
发现onSearch 搜索框内容时改变时的回调函数利用该参数
一个实现思路就是在你的onSearch里面去筛选你的dataSource数据:
在这里插入图片描述
在这里插入图片描述

另外官方给的树形穿梭框示例会导致滚动条不可使用,这里需要单独设置:
树结构:
在这里插入图片描述
另一边:
在这里插入图片描述

根据官方组件结合自己的数据业务场景修改,附上我的代码,供参考:

const TreeTransfer = ({ dataSource, targetKeys, ...restProps }) => {

  const transferDataSource = [];
  const dataSourceData=dataSource
  function flatten(list = []) {
    list.forEach(item => {
      transferDataSource.push(item);
      flatten(item.children);
    });
    
  }
  flatten(dataSource);
  return (
    
    <Transfer
    
      {...restProps}
      targetKeys={targetKeys}
      dataSource={transferDataSource}
      className="tree-transfer"
      showSearch
      listStyle={{
        width: 300,
        height: 300,
      }}
      showSelectAll={true}
      render={item => item.userNickname}
      rowKey={record => record.id}
      
      onSearch={(dir, val) => {
        
       if (dir === 'left') {
        const newDeptList = dataSourceData.filter(item => (
          item.children.filter(e=>(
            e.userNickname.indexOf(val) > -1 
          )).length>0||val.length==0
        )).map(item => {
          item = Object.assign({}, item)
          if (item.children) {
            item.children =item.children.filter(res => (res.userNickname.indexOf(val) > -1 ))
          }
          return item
        })
        dataSource=newDeptList    
     }  
  }}
    >
      {({ direction, onItemSelect,onItemSelectAll,onSelectAll, selectedKeys }) => {
        if (direction === 'left') {
          const checkedKeys = [...selectedKeys, ...targetKeys];
          return (
            <Tree
             height={200}
              blockNode
              checkable
              checkStrictly
              defaultExpandAll
              checkedKeys={checkedKeys}
              disableCheckbox={true}
              treeData={generateTree(dataSource, targetKeys)}
              onCheck={(_, { node: { key } }) => {
                onItemSelect(key, !isChecked(checkedKeys, key));
              }}
              onSelect={(_, { node: { key } }) => {
                console.log(checkedKeys);
                console.log(key);
                onItemSelect(key, !isChecked(checkedKeys, key));
              }}
            />
          );
        }
      }}
    </Transfer>
  );
};
  • 7
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值