基于antd的autocomplete的二次封装查询示例

 更新时间:2023年08月24日 11:23:50   作者:点墨  
这篇文章主要为大家介绍了基于antd的autocomplete的二次封装查询示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

正文

基于antd的autocomplete进行二次封装,用于后端实时查询数据

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,//异步获取数据
    defaultOptionsMap: protoTypes.object,//用于键盘精灵初始化赋值
}
export default EndAutoComplete;

以上就是基于antd的autocomplete的二次封装查询键盘示例的详细内容,更多关于antd autocomplete的二次封装的资料请关注脚本之家其它相关文章!

相关文章

  • D3.js(v3)+react 实现带坐标与比例尺的散点图 (V3版本)

    D3.js(v3)+react 实现带坐标与比例尺的散点图 (V3版本)

    散点图(Scatter Chart),通常是一横一竖两个坐标轴,数据是一组二维坐标,分别对应两个坐标轴,与坐标轴对应的地方打上点。由此可以猜到,需要的元素包括circle(圆)和axis(坐标轴),接下来通过本文大家分享D3.js(v3)+react 实现带坐标与比例尺的散点图 (V3版本) ,一起看看
    2019-05-05
  • 关于React状态管理的三个规则总结

    关于React状态管理的三个规则总结

    随着 JavaScript 单页应用开发日趋复杂,JavaScript 需要管理比任何时候都要多的 state (状态),这篇文章主要给大家介绍了关于React状态管理的三个规则,需要的朋友可以参考下
    2021-07-07
  • 用React实现一个类 chatGPT 的交互式问答组件的方法详解

    用React实现一个类 chatGPT 的交互式问答组件的方法详解

    这篇文章主要给大家详细介绍如何用React实现一个类 chatGPT 的交互式问答组件的方法,文中有详细的代码示例,对我们学习有一定的帮助,需要的朋友可以参考下
    2023-06-06
  • React中使用UEditor百度富文本的方法

    React中使用UEditor百度富文本的方法

    这篇文章主要介绍了React中使用UEditor的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-08-08
  • React实现简单登录的项目实践

    React实现简单登录的项目实践

    登录、注册、找回密码是前端项目经常遇到的需求,本文主要介绍了React实现简单登录的项目实践,具有一定的参考价值,感兴趣的可以了解一下
    2024-01-01
  • React+Antd+Redux实现待办事件的方法

    React+Antd+Redux实现待办事件的方法

    这篇文章主要介绍了React+Antd+Redux实现待办事件的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-03-03
  • 一文搞懂 React 18 中的 useTransition() 与 useDeferredValue()

    一文搞懂 React 18 中的 useTransition() 与 useDeferredValue()

    这篇文章主要介绍了一文搞懂 React 18 中的 useTransition()与useDeferredValue(),文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-09-09
  • React forwardRef 用法案例分析

    React forwardRef 用法案例分析

    这篇文章主要介绍了React forwardRef用法,forwardRef允许你的组件使用ref将一个DOM节点暴露给父组件,本文结合案例分析给大家讲解的非常详细,需要的朋友可以参考下
    2023-06-06
  • React模仿网易云音乐实现一个音乐项目详解流程

    React模仿网易云音乐实现一个音乐项目详解流程

    这篇文章主要介绍了React模仿网易云音乐实现一个音乐项目的详细流程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-08-08
  • react源码层探究setState作用

    react源码层探究setState作用

    写react的时候,踩了几次坑发现setstate之后state不会立刻更新,于是判定setstate就是异步的方法,但是直到有一天,我想立刻拿到更新的state去传参另一个方法的时候,才问自己,为什么setstate是异步的?准确地说,在React内部机制能检测到的地方,setState就是异步的
    2022-10-10

最新评论