最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

React Antd Select組件輸入搜索時(shí)調(diào)用接口方式

 更新時(shí)間:2025年08月30日 14:23:09   作者:水果攤見  
為優(yōu)化Select組件中文輸入時(shí)的接口調(diào)用,使用lodash.debounce實(shí)現(xiàn)防抖,避免每輸入一個字母即觸發(fā)請求,待用戶點(diǎn)擊空格完成輸入后,再調(diào)用接口獲取數(shù)據(jù),提升性能與用戶體驗(yàn)

前言

由于接口返回較多,需要在Select組件中輸入時(shí)進(jìn)行調(diào)用接口并搜索,而不是初始化時(shí)把全部寫入Option。

問題

當(dāng)輸入中文時(shí),每打一個字母都會調(diào)用一次接口,想在中文輸入完成,即點(diǎn)擊空格后再進(jìn)行接口調(diào)用

<Select
     prefix={
         <SearchOutlined
             style={{
                 color: SearchOutlinedColor?.backgroundColor,
             }}
         />
     }
     showSearch
     value={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}
     allowClear
     onClear={() => {
         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,輸入結(jié)束后再進(jìn)行接口調(diào)用
const debouncedFetchOrgData = useRef(
    debounce((searchValue) => {
        fetchOrgList(searchValue, setOrgOptions);
    }, 500)
).current;

// 調(diào)用接口,獲取列表,放入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]);

總結(jié)

以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • React通過父組件傳遞類名給子組件的實(shí)現(xiàn)方法

    React通過父組件傳遞類名給子組件的實(shí)現(xiàn)方法

    React 是一個用于構(gòu)建用戶界面的 JAVASCRIPT 庫。這篇文章主要介紹了React通過父組件傳遞類名給子組件的方法,需要的朋友可以參考下
    2017-11-11
  • React組件二次包裝的具體實(shí)現(xiàn)

    React組件二次包裝的具體實(shí)現(xiàn)

    本文主要介紹了React組件二次包裝的具體實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • React Router 5.1.0使用useHistory做頁面跳轉(zhuǎn)導(dǎo)航的實(shí)現(xiàn)

    React Router 5.1.0使用useHistory做頁面跳轉(zhuǎn)導(dǎo)航的實(shí)現(xiàn)

    本文主要介紹了React Router 5.1.0使用useHistory做頁面跳轉(zhuǎn)導(dǎo)航的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • 使用VSCode Debugger調(diào)試React項(xiàng)目的實(shí)現(xiàn)步驟

    使用VSCode Debugger調(diào)試React項(xiàng)目的實(shí)現(xiàn)步驟

    本文主要介紹了使用VSCode Debugger調(diào)試React項(xiàng)目的實(shí)現(xiàn)步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-09-09
  • React中state屬性案例詳解

    React中state屬性案例詳解

    在React中,state 是一個用于存儲組件內(nèi)部數(shù)據(jù)的特殊對象,每個React組件都可以包含自己的state,我們往往是通過修改state的值來驅(qū)動React重新渲染組件,這篇文章主要介紹了React中state屬性,需要的朋友可以參考下
    2023-11-11
  • React?split實(shí)現(xiàn)分割字符串的使用示例

    React?split實(shí)現(xiàn)分割字符串的使用示例

    當(dāng)我們需要將一個字符串按照指定的分隔符進(jìn)行分割成數(shù)組時(shí),我們可以在組件的生命周期方法中使用split方法來實(shí)現(xiàn)這個功能,本文就來介紹一下,感興趣的可以了解下
    2023-10-10
  • 詳解如何給React-Router添加路由頁面切換時(shí)的過渡動畫

    詳解如何給React-Router添加路由頁面切換時(shí)的過渡動畫

    這篇文章主要介紹了詳解如何給React-Router添加路由頁面切換時(shí)的過渡動畫,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-04-04
  • React合成事件原理解析

    React合成事件原理解析

    事件是在編程時(shí)系統(tǒng)內(nèi)發(fā)生的動作或者發(fā)生的事情,而開發(fā)者可以某種方式對事件做出回應(yīng),而這里有幾個先決條件,這篇文章主要介紹了React合成事件原理解析,需要的朋友可以參考下
    2022-07-07
  • React構(gòu)建簡潔強(qiáng)大可擴(kuò)展的前端項(xiàng)目架構(gòu)

    React構(gòu)建簡潔強(qiáng)大可擴(kuò)展的前端項(xiàng)目架構(gòu)

    這篇文章主要為大家介紹了React構(gòu)建簡潔強(qiáng)大可擴(kuò)展的前端項(xiàng)目架構(gòu)實(shí)現(xiàn),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • 使用React18和WebSocket構(gòu)建實(shí)時(shí)通信功能詳解

    使用React18和WebSocket構(gòu)建實(shí)時(shí)通信功能詳解

    WebSocket是一種在Web應(yīng)用中實(shí)現(xiàn)雙向通信的協(xié)議,它允許服務(wù)器主動向客戶端推送數(shù)據(jù),而不需要客戶端發(fā)起請求,本文將探索如何在React?18應(yīng)用中使用WebSocket來實(shí)現(xiàn)實(shí)時(shí)通信,感興趣的可以了解下
    2024-01-01

最新評論

大关县| 黔东| 荣昌县| 龙胜| 北宁市| 贡觉县| 珠海市| 鄂托克旗| 开化县| 筠连县| 施甸县| 道孚县| 衡阳县| 都匀市| 孟州市| 韶山市| 睢宁县| 白河县| 大化| 河曲县| 泽库县| 鹤峰县| 洪江市| 吉首市| 故城县| 上虞市| 泰顺县| 太谷县| 永胜县| 汾阳市| 德保县| 登封市| 南汇区| 棋牌| 舞钢市| 阿合奇县| 桓仁| 卢氏县| 海原县| 横山县| 饶阳县|