解决AutoComplete数据过多时的卡顿问题

当AutoComplete组件的data数据量超过2千条时,频繁输入导致卡顿。解决方案包括使用防抖函数限制onChange事件的触发频率,以及首次加载时仅展示前50条数据,后续根据关键词过滤更新dataSource,降低DOM渲染压力,提高用户体验。
摘要由CSDN通过智能技术生成
  • 如下代码,data数据超过2千条时,每次输入字符过滤时非常卡
<AutoComplete
  dataSource={data}
  onChange={this.handleChange }
  allowClear={true}
  filterOption={
    (inputValue, option) => option.props.children.toUpperCase().indexOf(inputValue.toUpperCase()) !== -1
  }
/>

其原因: 每次输入变化,data就要从2000多条数据中过滤出目标元素,一过滤就导致AutoComplete下拉列表得变化,浏览器得重新绘制下拉列表的Dom,导致浏览器卡

解决办法一

采用防抖函数,在间隔时间内,连续输入字符串只在最后一个字符串发生时才触发事件(onChange默认输入内容已改变就触发事件)

  • 防抖函数
let timer;
export const debounce = (func, wait ) => {
  // let timer = 0;
  return function(...args) {
    if (timer) clearTimeout(timer);

    timer = setTimeout(() => {
      func.apply(this, args);
    }, wait);
  };
};
  • 使用AutoComplete使用防抖函数
<AutoCo
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值