基于antd的autocomplete的二次封裝查詢示例
正文
基于antd的autocomplete進行二次封裝,用于后端實時查詢數(shù)據(jù)
autocomplete.js
import React, { useEffect, useState } from "react";
import { useDebounceFn } from "ahooks";
import { AutoComplete as AntdAutoComplete } from "antd";
import lodash from "lodash";
import protoTypes from "prop-types";
function EndAutoComplete(props) {
const { value: propValue, onChange: propOnChange, defaultOptionsMap, fetchData, ...otherProps } = props;
const [value, setValue] = useState(propValue);
const [options, setOptions] = useState();
const [optionsMap, setOptionsMap] = useState({});
//初始化value
useEffect(() => {
if (defaultOptionsMap) {
setValue(defaultOptionsMap[propValue]);
}
}, [defaultOptionsMap])
//更新options map
useEffect(() => {
if (lodash.isArray(options)) {
let newOptionMap = {};
options.forEach(item => {
const { value, label } = item;
newOptionMap[label] = value;
})
setOptionsMap(newOptionMap);
}
}, [options])
const _handleSearch = value => {
const promise = fetchData(value);
if (promise && promise.then) {
promise.then(data => {
setOptions(data);
}).catch(e => {
console.error("AutoComplete Fetch Data Error", e)
setOptions([]);
})
}
}
const { run: handleSearch } = useDebounceFn(_handleSearch, { wait: 500 });//防抖
const onSearch = value => {
if (!value.trim()) {
setOptions([]);
return;
}
if (lodash.isFunction(fetchData)) {
handleSearch(value);
}
}
const onChange = (value) => {
if (lodash.isFunction(propOnChange)) {
propOnChange(optionsMap[value] || -999999);
}
setValue(value);
}
const onSelect = (value, option) => {
if (lodash.isFunction(propOnChange)) {
propOnChange(value);
}
setValue(option.label);
}
return (
<AntdAutoComplete
options={options}
onSearch={onSearch}
onSelect={onSelect}
onChange={onChange}
value={value}
{...otherProps}
>
</AntdAutoComplete>
)
}
EndAutoComplete.prototype = {
fetchData: protoTypes.func,//異步獲取數(shù)據(jù)
defaultOptionsMap: protoTypes.object,//用于鍵盤精靈初始化賦值
}
export default EndAutoComplete;以上就是基于antd的autocomplete的二次封裝查詢鍵盤示例的詳細(xì)內(nèi)容,更多關(guān)于antd autocomplete的二次封裝的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Hello?React的組件化方式之React入門小案例演示
這篇文章主要介紹了Hello?React的組件化方式-React入門小案例,本文通過Hello?React的案例,?來體驗一下React開發(fā)模式,?以及jsx的語法,需要的朋友可以參考下2022-10-10
React實現(xiàn)錨點跳轉(zhuǎn)組件附帶吸頂效果的示例代碼
這篇文章主要為大家詳細(xì)介紹了React如何實現(xiàn)移動端錨點跳轉(zhuǎn)組件附帶吸頂效果,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起了解一下2023-01-01
React中使用react-player 播放視頻或直播的方法
這篇文章主要介紹了React中使用react-player 播放視頻或直播,本文教大家如何使用react框架及創(chuàng)建實例的代碼,本文內(nèi)容簡短給大家介紹的非常詳細(xì),需要的朋友可以參考下2022-01-01
React替換傳統(tǒng)拷貝方法的Immutable使用
Immutable.js出自Facebook,是最流行的不可變數(shù)據(jù)結(jié)構(gòu)的實現(xiàn)之一。它實現(xiàn)了完全的持久化數(shù)據(jù)結(jié)構(gòu),使用結(jié)構(gòu)共享。所有的更新操作都會返回新的值,但是在內(nèi)部結(jié)構(gòu)是共享的,來減少內(nèi)存占用2023-02-02
React Native中ScrollView組件輪播圖與ListView渲染列表組件用法實例分析
這篇文章主要介紹了React Native中ScrollView組件輪播圖與ListView渲染列表組件用法,結(jié)合實例形式詳細(xì)分析了ScrollView組件輪播圖與ListView渲染列表組件具體功能、使用方法與操作注意事項,需要的朋友可以參考下2020-01-01
React 的調(diào)和算法Diffing 算法策略詳解
React的調(diào)和算法,主要發(fā)生在render階段,調(diào)和算法并不是一個特定的算法函數(shù),而是指在調(diào)和過程中,為提高構(gòu)建workInProcess樹的性能,以及Dom樹更新的性能,而采用的一種策略,又稱diffing算法2021-12-12

