基于antd的autocomplete的二次封裝查詢示例
正文
基于antd的autocomplete進(jìn)行二次封裝,用于后端實(shí)時(shí)查詢數(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的二次封裝的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
手挽手帶你學(xué)React之React-router4.x的使用
這篇文章主要介紹了手挽手帶你學(xué)React之React-router4.x的使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-02-02React Fragment 和空標(biāo)簽(<></>)用法及區(qū)別詳解
本文詳細(xì)介紹了React中的Fragment和空標(biāo)簽的使用,包括它們的區(qū)別、使用場(chǎng)景、性能考慮以及最佳實(shí)踐,本文給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧2025-01-01React?程序設(shè)計(jì)簡(jiǎn)單的輕量級(jí)自動(dòng)完成搜索框應(yīng)用
這篇文章主要為大家介紹了React?程序設(shè)計(jì)簡(jiǎn)單的輕量級(jí)自動(dòng)完成搜索框應(yīng)用,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-10-10React源碼state計(jì)算流程和優(yōu)先級(jí)實(shí)例解析
這篇文章主要為大家介紹了React源碼state計(jì)算流程和優(yōu)先級(jí)實(shí)例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-11-11從零開(kāi)始搭建一個(gè)react項(xiàng)目開(kāi)發(fā)
這篇文章主要介紹了從零開(kāi)始搭建一個(gè)react項(xiàng)目開(kāi)發(fā),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-02-02React.memo函數(shù)中的參數(shù)示例詳解
這篇文章主要為大家介紹了React.memo函數(shù)中的參數(shù)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-09-09