изменении текста в поле должен загружаться список языков (сейчас стоит заглушка в виде setTimeout)
Но изначально, если я быстро введу, например, три буквы в поле, то список языков загрузится для каждой из них, "проморгнув", соответственно, первые два из них. Нормально ли ЭТО решение проблемы, или не стоит вводить локальную переменную и сверять сразу со стором, или как еще?
Делай диспатч loadLanguages через debounce http://demo.nimius.net/debounce_throttle/
я сейчас с телефона, но загуглив, надеюсь, понял, что вы имеете ввиду но тогда, если я быстро введу те же самые 3 буквы, то список языков загрузится только для первой, разве нет?
Только для последнего изменения. Где будут все три буквы
в этом примере выполняется только первая
Зависит от реализации. Пишется такая функция в три строки
у меня нет идей, как понять, "последняя ли функция за временной промежуток", ведь нельзя точно знать, когда я введу еще одну букву в поле
1. когда произошло событие, нужно запустить таймиер 2, если до истечения таймера произошло новое событие, сбросить таймер и перейти к п.1 3. по истечению таймера вызвать функцию
я сделал почти тоже самое (на скрине), только без введения функции-обертки
на каком скрине?
debounce — это классический паттерн, реализуется через функцию-обёртку (по-взрослому — HOF)
этом
там точно не debounce. отмены предыдущего вызова (очистки таймера) нет, только задержка в 1 секунду перед новым
опять же, то, что на скриншоте, работает так, как надо просто, может, есть более "правильный" способ это сделать?
https://codesandbox.io/s/heuristic-night-i0uyc?file=/src/index.js
Обсуждают сегодня