Ant Design的TreeSelect支持多选和搜索功能,如果查询不到,则搜索框不能清除的问题处理。

树型选择控件多选支持搜索的时候,输入文字,匹配不到数据的时候,失去焦点或者提交表单的时候清空输入的查询文字.

之前帖子方法有一点问题,就是在搜索树的时候,如果搜索到,在点击数据会存在数据有时候加载不进去的情况。修改原始代码。

问题如下截图:

想要的结果如下:

解决方案:

在AntD的Select中,当失去焦点切未查询到数据时,会自动清空搜索框的值。地址:Antd Select

在实现这个过程中,也踩了不少坑。仔细读过TreeSelect的API之后发现了一个属性,叫做searchValue。searchValue就是搜索框展示的值。再配合onSearch事件和onBlur事件。解决了这个问题。

具体思路:在搜索的时候触发onSearch事件,将搜索值赋给searchValue,更新state,当失去焦点时,将searchValue更新为‘’,更新state。

第一版代码如下:

class Manager extends Component {
  constructor(props) {
    super(props);
    this.state = {
      viewSearchValue:''
    };
  }

 qureHandleSearch = (value) => {
    this.setState({
      viewSearchValue:value
    })
  }

clearSearchValue = () =>{
    this.setState({
      viewSearchValue:''
    })
 }
render() {
const { viewSearchValue } = this.state;
   return (
                   <TreeSelect
                    allowClear
                    multiple
                    style={{ width: "100%" }}
                    dropdownStyle={{ maxHeight: 400, overflow: "auto" }}
                    treeData={roleTree} //roleTree为树的数据,就不贴代码了
                    treeNodeFilterProp="title"
                    onSearch={this.qureHandleSearch}
                    searchValue={viewSearchValue}
                    onBlur={this.clearSearchValue}
                  />

  )
}

}

 大致一看没有问题,但是如果搜索框的值在这个树中存在,那么点击这个数据的时候,这条数据不会价值的TreeSelect上,就是不会选中,相当于重新刷新了一次页面。大家可以尝试看下。

对于这个问题,其实查了一下原因,是由于onBlur的问题,antd的onBlur事件触发的频率还是太高了。点击搜索框都会触发blur。所以继续优化代码。

利用onChange,FormItem,onSearch和onBlur来完成。

完整代码如下:

 

class Manager extends Component {
  constructor(props) {
    super(props);
    this.state = {
      viewSearchValue:''
    };
  }

 qureHandleSearch = (value) => {
    this.setState({
      viewSearchValue:value
    })
  }

clearSearchValue = () =>{
    setTimeout(() => {
      this.setState({
        viewSearchValue:''
      })
    }, 100);
 }
selectChange = (value ) =>{
    const {form :{setFieldsValue} } = this.props;
    setFieldsValue({
      selectId:value
    })
  }
render() {
const { viewSearchValue } = this.state;
   return (
                <FormItem labelCol={{ span: 2 }} wrapperCol={{ span: 20 }} label=                        
                  {formatMessage({ id: "doc.directory.edit.role" })}>
                {getFieldDecorator("selectId", {
                  initialValue: [],
                })(
                   <TreeSelect
                    allowClear
                    multiple
                    style={{ width: "100%" }}
                    dropdownStyle={{ maxHeight: 400, overflow: "auto" }}
                    treeData={roleTree}//roleTree为树的数据,就不贴代码了
                    treeNodeFilterProp="title"
                    onSearch={this.qureHandleSearch}
                    searchValue={viewSearchValue}
                    onBlur={this.clearSearchValue}
                    onChange={this.selectChange}
                  />
                )}
                </FormItem>

  )
}

}

完美解决!有问题可以留言。

  • 5
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 12
    评论
### 回答1: Ant Design Treeselect是常用的下拉式选择框组件,可以方便地对树形数据进行选择。然而,当数据量过大时,就出现卡顿的问题,这是由于组件需要遍历整个数据树结构进行渲染。 为了解决这个问题,可以采取以下措施: 1. 数据异步加载:可以采用异步加载数据的方式,当用户点击或者输入选择框时,再根据用户的操作请求数据,这样可以减少一次性加载大量数据的负担。 2. 数据缓存:可以把访问过的数据缓存到本地,当需要时直接从本地获取,可以减少网络请求和后端压力。 3. 分页展示:可以把数据进行分页,每次只显示一部分数据,当用户需要时,再加载下一页数据,这样可以减少一次性加载大量数据的负担,提高子树渲染速度。 4. 使用虚拟滚动:可以对组件进行优化,使用虚拟滚动的方式,只渲染可视区域的数据,减少不必要的渲染,提高组件性能。 总而言之,当Ant Design Treeselect遇到数据量过大卡顿的问题时,可以采用异步加载、数据缓存、分页展示、虚拟滚动等方法来优化组件性能,避免不必要的负担。 ### 回答2: Ant Design Treeselect 是一款基于 React 框架的前端组件库,其通过提供树形结构选择器组件来帮助用户快速进行选择操作,但是在数据量较大的情况下出现卡顿现象。 在数据量较大的情况下,Ant Design Treeselect 组件的数据处理和渲染所需的时间较长,导致用户在使用时感到不流畅,出现卡顿或者卡死的情况。 这种情况可以通过以下两种方式来解决: 1.数据分页 数据分页可以将大量数据分割成不同的页,每次只加载当前页所需的数据,从而减少数据的处理和渲染时间,提高用户使用体验。 这种方式需要在后端对数据进行处理,将数据按照一定的规则分成多个页面,并将分页信息返回给前端。前端则需要通过组件的 API 来控制数据的加载,根据用户选择的页面来加载对应的数据。 2.懒加载 懒加载可以让用户只在需要时加载数据,而不是一次性加载所有数据。这样能够减少数据的处理和渲染时间,提高用户使用体验。 这种方式需要在前端对数据进行处理,将数据按照一定的规则分成多个节点,并在用户展开节点时加载对应的子节点。前端需通过组件的 API 来控制数据的加载,根据用户操作来动态加载数据。 综上所述,当使用 Ant Design Treeselect 组件处理大量数据时,我们需要考虑如何优化数据处理和渲染速度,以提高用户体验。以上两种方式都是有效的解决方案,需要根据具体业务需求选择适合的方式来进行优化。 ### 回答3: Ant Design中的TreeSelect是一种基于树形结构的下拉选择组件,可以快速地对数据进行选择和筛选。但是,当TreeSelect的数据量太大时,出现卡顿现象,这主要是由于TreeSelect需要加载大量数据,导致页面响应速度变慢,从而影响用户的使用体验。下面我将从以下几个方面解释TreeSelect数据量太大卡顿的原因和解决方法。 首先,由于TreeSelect数据量过大,前端需要加载大量的数据,这导致前端渲染速度变慢,从而影响用户的使用体验。解决这个问题的方法有:前端分页、懒加载或者异步加载等,这些方法可以减少前端加载数据的数量,从而提高前端渲染速度。 其次,由于TreeSelect的数据量过大,后端需要查询大量的数据,这导致后端响应速度变慢,从而影响前端的使用体验。解决这个问题的方法有:增加索引、优化查询语句、使用缓存等,这些方法可以优化后端的查询速度,从而提升整个应用的性能。 另外,由于TreeSelect的数据量过大,导致TreeSelect的渲染速度变慢,从而影响用户的使用体验。解决这个问题的方法有:使用虚拟滚动、优化渲染、增加筛选条件等,这些方法可以优化TreeSelect的渲染速度,从而提升用户的使用体验。 总之,TreeSelect数据量太大卡顿的问题主要是由于数据量过大导致的,要解决这个问题,需要采用前端分页、懒加载或者异步加载等方法减少前端加载数据的数量;同时需要采用增加索引、优化查询语句、使用缓存等方法优化后端查询速度;还需要采用虚拟滚动、优化渲染、增加筛选条件等方法优化TreeSelect的渲染速度。
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值