import { useState, useEffect, useCallback } from 'react'; import { debounce } from 'lodash'; import request from '@/utils/request'; const useCoolHook = (url, label) => { const [options, setOptions] = useState([]); const [inputValue, setInputValue] = useState(''); const fetchData = async (condition) => { try { const res = await request.post(url, { condition: condition, pageSize: 20 }).catch(error => { console.error(error.message); }); const { code, msg, data: { records } } = res.data; if (code === 200) { setOptions(records.map(item => ({ label: item[label], id: item.id }))) } else { console.error(msg); setOptions([]); } } catch (error) { console.error(error.message); setOptions([]); } } const debouncedFetch = useCallback(debounce(fetchData, 300), [url]); useEffect(() => { // console.log(inputValue, url) // if (inputValue) { // debouncedFetch(inputValue); // } else { // setOptions([]); // } debouncedFetch(inputValue); }, [inputValue, debouncedFetch]); const resetInput = () => setInputValue(''); return { options, setInputValue, resetInput, }; } export default useCoolHook;