当前位置: 首页 > news >正文

[React]Antd Select组件输入搜索时调用接口

前言

由于接口返回较多,需要在Select组件中输入时进行调用接口并搜索,而不是初始化时把全部写入Option。

问题

当输入中文时,每打一个字母都会调用一次接口,想在中文输入完成,即点击空格后再进行接口调用

<Selectprefix={<SearchOutlinedstyle={{color: SearchOutlinedColor?.backgroundColor,}}/>}showSearchvalue={orgValue}placeholder={t('Input Search Text')}style={{ width: 250 }}defaultActiveFirstOption={false}suffixIcon={null}filterOption={false}notFoundContent={null}onSearch={handleOrgSearch}onChange={handleOrgChange}options={orgOptions}onCompositionStart={handleCompositionStart}  // 对中文的处理onCompositionEnd={handleCompositionEnd}allowClearonClear={() => {setOrgValue('');onOrgSearch('');setOrgOptions([]);}}size="small"variant="filled"/>

引入lodash.debounce

const [orgValue, setOrgValue] = useState();
const [orgOptions, setOrgOptions] = useState([]);
const [isComposing, setIsComposing] = useState(false);
const searchRef = useRef(null);// 注册debouncedRef,输入结束后再进行接口调用
const debouncedFetchOrgData = useRef(debounce((searchValue) => {fetchOrgList(searchValue, setOrgOptions);}, 500)
).current;// 调用接口,获取列表,放入option中
const fetchOrgList = (value, callback) => {selectCenterInfo({ name: value }).then(result => {if (result.length) {const data = result.map((item) => ({value: item.value,label: `${item.label}(${item.value})`,}));callback(data);} else {callback([]);}}).catch(err => {console.log(err);callback([]);});
};const handleOrgSearch = (newValue) => {searchRef.current = newValue;if (!isComposing) {debouncedFetchOrgData(newValue);};
};const handleOrgChange = (newValue) => {setOrgValue(newValue);onOrgSearch(newValue);  // 这是传入组件的props, 用来把选中的值传回父组件
};const handleCompositionStart = () => {  setIsComposing(true);
};const handleCompositionEnd = (e) => {setIsComposing(false);searchRef.current = e.target.value;if (searchRef.current) {fetchOrgList(searchRef.current, setOrgOptions);}
};useEffect(() => {return () => {debouncedFetchOrgData.cancel();};
}, [debouncedFetchOrgData]);
http://www.dtcms.com/a/350149.html

相关文章:

  • 第二章 数据通信基础
  • beego v2 处理全局异常
  • 文献阅读笔记:KalmanNet-融合神经网络和卡尔曼滤波的部分已知动力学状态估计
  • Canvas 内凹弧形导航菜单(顶部内凹)
  • 基于MATLAB长时间序列遥感数据处理及在全球变化、物候提取、植被变绿与固碳分析等领域中的应用
  • 权限越权概念
  • centos7 安装coze
  • 【计算星座】2022-10-24
  • 普蓝超强承重越野移动机器人底盘轻松应对复杂路段
  • 《C++进阶:引用补充、内联函数与nullptr 核心用法》
  • 3 系统设计面试的框架
  • Odoo 企业版用户手册[新版]-前言 00.1-手册说明与使用指南
  • EasyClick 生成唯一设备码
  • SP95N65CTO:一款高性能650V SiC MOSFET的全面解析
  • 数据赋能(409)——大数据——合规性和伦理性原则
  • 强化学习基础总结
  • 《分布式系统跨服务数据一致性Bug深度复盘:从现象到本质的排查与破局》
  • 2025年优化算法:雪雁优化算法(Snow Geese Algorithm,SGA)
  • 2025 JVM 并发革命:虚拟线程与结构化并发,引领性能飞跃(35)
  • 京东前端社招面经
  • Pandas 高效数据处理:apply、向量化与分组
  • Qt——多媒体(音频、视频播放)
  • 艾利特石油管道巡检机器人:工业安全的智能守护者
  • 系统数据库
  • WRC2025 | 澳鹏亮相2025世界机器人大会,以数据之力赋能具身智能新纪元
  • 2025年9月计算机二级C++语言程序设计——选择题打卡Day6
  • 神经网络模型搭建及手写数字识别案例
  • 关于“程序=数据结构+算法”的深层认识
  • Java图形图像处理【双缓冲技术与游戏】【九】
  • Java全栈开发面试实战:从基础到微服务的深度解析