Sobes.tech
Назад к вопросам
Middle+
1

const LiveSearch = () => { const [inputValue, setInputValue] = useState('') const onInputChange = (e) => { setInputValue(e.target.value) search(e.target.value) } return ( <div> <input value={inputValue} onChange={onInputChange} type="text" /> </div> ) } <span> Searching for: <LiveSearch /> </span>

Компании, где спрашивали
IT OneIT One

Ответ от нейросети

sobes.tech AI

В данном компоненте LiveSearch при каждом вводе символа вызывается функция search с текущим значением поля ввода. Это может привести к избыточным запросам, особенно если search — это запрос к серверу.

Для оптимизации обычно применяют дебаунсинг (debounce) — задержку вызова функции до тех пор, пока пользователь не перестанет вводить текст в течение определённого времени. Это снижает количество вызовов search и улучшает производительность.

Пример с использованием debounce через lodash:

import React, { useState, useCallback } from 'react'
import debounce from 'lodash.debounce'

const LiveSearch = () => {
  const [inputValue, setInputValue] = useState('')

  // Оборачиваем search в debounce с задержкой 300 мс
  const debouncedSearch = useCallback(
    debounce((query) => {
      search(query)
    }, 300),
    []
  )

  const onInputChange = (e) => {
    const value = e.target.value
    setInputValue(value)
    debouncedSearch(value)
  }

  return (
    <div>
      <input value={inputValue} onChange={onInputChange} type="text" />
    </div>
  )
}

Таким образом, search вызывается не при каждом вводе, а только спустя 300 мс после последнего символа.

Также важно учитывать очистку debounce при размонтировании компонента, чтобы избежать утечек памяти.