Назад к вопросам
IT One
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>
Компании, где спрашивали
Ответ от нейросети
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 при размонтировании компонента, чтобы избежать утечек памяти.