Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

86
Visualizações
How to debounce a Search bar function?

I'm trying to set an onChange timer for the Search bar, but I don't know exactly how. I tried several options, but none worked. How should the debounce function be created and called? Do I have to create a special function or is it ok how I called // onChange? Can you help me with some information?

Search:

import React, {useState} from 'react'
import { debounce } from "lodash";

const Search = ({getQuery}) => {
const [text, setText] = useState('')

 const onChange = (q) => {
    setText(q)
    getQuery(q)
}

return (
    <section className='search'>
        <form>
            <input 
            type='text'
            className='form-control'
            placeholder='Search characters'
            value={text}
            onChange={(e) =>  onChange(e.target.value)}
            // onChange={(e) => debounce(() => onChange(e.target.value), 3000)} 
            autoFocus
            />
        </form>
    </section>
)}

export default Search

App:

function App() {

const [items, setItems] = useState([])
const [info, setInfo] = useState([])
const [isLoading, setIsLoading] = useState(true)
const [query, setQuery]=useState('')
const [page, setPage] = useState(1)
const [id, setId] = useState()
const [status, setStatus] = useState()

useEffect(() => {
const fetchItems = async () => {
  const result = await axios(`https://rickandmortyapi.com/api/character?name=${query}&page=${page}&id=${id}`)

  setItems(result.data.results)
  setInfo(result.data.info)
  setIsLoading(false)
}

fetchItems()
}, [query, page, id ])

return (

<div className='container'>

<Router>
  <Switch>
    <Route exact path='/' >
      <Header />
      
      <Search getQuery={(q) =>setQuery(q) } />
      
      <Dropdown getStats={(s) => setStatus(s) } />
      <Character isLoading={isLoading} items={items} />
    </Route>
     <Route path='/character/:id'>
      <Header />
      <InfoCaracter key={items.id} items={items} />
    </Route>
  </Switch>
</Router>

</div>
)}

export default App;
about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

You can use a separate state to store data for the request and call getQuery only when this value changes

const Search = ({ getQuery }) => {
    const [text, setText] = useState('');
    const [debouncedValue, setDebouncedValue] = useState(text);

    useEffect(() => {
        const handler = setTimeout(() => {
            setDebouncedValue(text);
        }, 300);

        return () => {
            clearTimeout(handler);
        };
    }, [text]);

    useEffect(() => {
        getQuery(debouncedValue);
    }, [getQuery, debouncedValue]);

    const onChange = (q) => {
        setText(q);
    };

    return (
        <section className="search">
            <form>
                <input
                    type="text"
                    className="form-control"
                    placeholder="Search characters"
                    value={text}
                    onChange={(e) => onChange(e.target.value)}
                    autoFocus
                />
            </form>
        </section>
    );
};
about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda