自动补全的 select antd react

自动补全的 select antd react

文档:自动补全的 select antd react.note

链接:http://note.youdao.com/noteshare?id=f5e4a93d2b9d6be8e459edd4eb86323b\&sub=19796E9BC04D4ABD9ACE325FDFF59B0E
添加链接描述

js 复制代码
import React, { useState, useRef } from 'react';
import { AutoComplete, Button, Input } from 'antd';
import axios from 'axios';
import { useNavigate } from 'react-router-dom';
import TimeUtil from '@/utils/TimeUtil';

interface AutoCompleteSearchBoxProps {
  // history: any; // 这里的类型可以根据你的实际需求进行调整
  // data: any; // 这里的类型可以根据你的实际需求进行调整
  value: any;
  onChange: any;
  // onSelectChange 
}

interface SearchResult {
  label: string;
}
// { value=null, onChange=(val:any)=>{} }
// D:\proj\brain\admin-antd-react\src\components\AutoCompleteSearchInput
// JumpSearchBox
// JumpSearchBox
const AutoCompleteSearchInput: React.FC<AutoCompleteSearchBoxProps> = (props) => {
  const [searchResults, setSearchResults] = useState<SearchResult[]>([]);
  const inputRef = useRef<Input>(null);
  const navigate = useNavigate();
  const [searchVal, setSearchVal] = useState<string | null>(null);

  const handleButtonClick = () => {
    console.log("handleButtonClick")
    // console.log("autoCompleteRef.current")
    console.log("inputRef.current")
    console.log(inputRef.current)
    console.log("searchVal")
    console.log(searchVal)

    // console.log(autoCompleteRef.current)
    // if (autoCompleteRef.current) {
    //   const searchData = autoCompleteRef.current.getData(); // 获取AutoCompleteSearchInput组件的数据
    //   console.log(searchData);
    // }
  };
  // "前一周",
  const options = ["前三天",  "前一个月", "前一年"];

  function getSearchLabels(options) {
    let list = []
    for (let option of options) {
      list.push(
        {
          keywords: option,
          label: option
        },
      )

    }

    // console.log("list")
    // console.log(list)

    return list
  }


  // ts 获取 前一周的 时间戳

  // <TimeUtil className="wee"> </TimeUtil>


  let SearchLabels = [
    {
      keywords: "dadad",
      label: "dadad"
    },
    {
      label: "ada"
    },
    {
      label: "前一年",
      // timestamp: TimeUtil.yesterdayMillis(-3)
    },
    
    {
      keywords: "week,前一周,周,zhou,1",
      label: "前一周",
      timestamp: TimeUtil.weekAddTimeStamp(-1)
    },

    ...getSearchLabels(options)
  ];

  // TimeUtil.weekAddTimeStamp(-3)

  function strIsLike(str: string, str2: string) {
    return str.includes(str2) || str2.includes(str)
  }

  function findLikeStrs(str, SearchLabels) {
    let resList = []
    for (let obj of SearchLabels) {
      // obj.label
      if (
        // strIsLike(str, obj.label)
        strIsLike(str, obj.keywords||obj.label)
      ) {
        resList.push(obj)
      }

    }

    return resList
  }

  const handleSearch = (value: string) => {
    if (!value) {
      setSearchResults(SearchLabels);
      return
    }
    props?.onChange(value)

    // 发送远程搜索请求
    axios
      .get(`https://api.example.com/search?q=${value}`)
      .then((response) => {
        const searchResults = response.data.results;
        setSearchResults(searchResults);
      })
      .catch((error) => {
        console.error('Error fetching search results:', error);
        // const searchResults: SearchResult[] = SearchLabels
        // setSearchResults(searchResults);

        //  setSearchResults(SearchLabels);
        setSearchResults(
          findLikeStrs(value, SearchLabels)
        );

      });

    // if (value) {

    // } else {
    //   setSearchResults([]);
    // }
  };

  const handleSelect = (value: string) => {
    setSearchVal(value)
    props.onChange(value)

    console.log("inputRef.current");
    console.log(inputRef.current);
    inputRef.current?.focus();
    // console.log(    "inputRef.current?.input.setValue");
    // console.log(    inputRef.current?.input.setValue);

    // inputRef.current?.input.setValue(value);

    let inputItem = inputRef.current?.input
    inputItem.value = value
    const path = `/details/${value}`;
    // navigate(path);
    console.log("props");
    console.log(props);

    console.log("props.history");
    console.log(props.history);
  };

  return (
    <div>
      <AutoComplete
        style={{ width: 200 }}
        options={searchResults.map((result) => ({
          value: result.label,
          label: result.label,
        }))}
        onSearch={handleSearch}
        onSelect={handleSelect}
      >
        <Input
          ref={inputRef}
          placeholder="请输入关键字"
        />
      </AutoComplete>

      {/* <Button type="primary" onClick={handleButtonClick} >AutoCompleteSearchInputButton</Button> */}
    </div>
  );
};

export default AutoCompleteSearchInput;
js 复制代码
import AutoCompleteSearchInput from '@/components/AutoCompleteSearchInput';


  <div>
        AutoCompleteSearchInput
        <AutoCompleteSearchInput onChange={onSelectChange} ref={autoCompleteRef} history={undefined} ></AutoCompleteSearchInput>

  {/* 点击按钮 获取 AutoCompleteSearchInput的 数据  */}
        <Button type="primary" onClick={handleButtonClick} >AutoCompleteSearchInputButton</Button>
      </div>
相关推荐
默_笙6 小时前
🍔 中间件不只是打日志:四个钩子、一次短路,和自带的工具
前端·javascript
程序员老赵7 小时前
Docker 部署 Dolibarr:轻松搭建开源 ERP/CRM 平台
运维·前端·后端
星禾元亨7 小时前
同一件事有三份资料,AI 该信哪一份?冲突判定、优先级链与处置流程
前端·人工智能
Dovis(誓平步青云)7 小时前
家里设备越来越多,如何用一张空间地图控制灯光和温度![
android·java·前端·javascript·人工智能·电脑
穆梓兰煊7 小时前
TS5.7 vs 裸JS:AI应用少3坑
前端
榆瓷8 小时前
闲着没事,我把 WebGPU 的样板代码封成了一个库
前端
136096757238 小时前
页面打不开不是 Nginx 的错
前端·后端
liangshanbo12158 小时前
高级前端面试题:package.json 常见字段
前端·json
CappuccinoRose9 小时前
输入事件进阶
前端·javascript·输入事件
记得开心一点嘛10 小时前
Trellora:基于 Electron、React 和本地知识库的 AI 知识工作台
人工智能·react.js·electron