Hola, tengo un componente de entrada (llamado Combobox), actualmente, si trato de escribir una cadena dentro, sigue consultando, traté de crear un enlace de rebote para que no consulte de inmediato, básicamente espere 500 ms hasta que ejecute la consulta, pero actualmente sigue preguntando, ¿qué me estoy perdiendo aquí?
El gancho de rebote:
import { useEffect, useState } from 'react' function useDebounce<T>(value: T, delay?: number): T { const [debouncedValue, setDebouncedValue] = useState<T>(value) useEffect(() => { const timer = setTimeout(() => setDebouncedValue(value), delay || 500) return () => { clearTimeout(timer) } }, [value, delay]) return debouncedValue } export default useDebounceEl componente con la entrada
export default function TagSelectionInput() { const [query, setQuery] = useState(''); const debouncedValue = useDebounce(query, 500); const [filterTags, { data, loading, error }] = useLazyQuery<FilterTagsQuery>( filterQuery, { variables: { filter: query, offset: 0, limit: 20, }, }, ); useEffect(() => { const fetchTags = async () => { if (query.length > 0) { const data = await filterTags(); console.log(data); } }; fetchTags(); }, [data, debouncedValue, filterTags]); return ( <Combobox value={query} onChange={setQuery}> <div className="relative"> <SearchIcon className="pointer-events-none absolute top-3.5 left-4 h-5 w-5 text-gray-400" aria-hidden="true" /> <Combobox.Input className="border border-gray-300 rounded-md shadow-sm h-10 w-full focus:outline-none focus:ring-1 focus:ring-indigo-500 focus:border-indigo-500 sm:text-sm pl-11 pr-4 text-gray-800 placeholder-gray-400" placeholder="Search..." onChange={(event) => setQuery(event.target.value)} /> </div>