g-unit
@g-unit

Почему не работает debounce?

Через 2 секунды должно выводиться значение из инпута, но оно почему-то undefined.
Код здесь
  • Вопрос задан
  • 459 просмотров
Решения вопроса 1
lastuniverse
@lastuniverse
Всегда вокруг да около IT тем
разбирайтесь (ниже рабочий код):
import React, { useState } from 'react';
import './styles.css';

function debounce(fn, ms, ...args) {
  let timer;
  return (value) => {
    timer = setTimeout(() => {
      // ваш вариант вообще забывал о том что в fn вы пытаетесь передать value
      fn.apply(this, [value,...args]);

      // удалять обработчик таймаута вообще не надо, но если это всетаки делать, то наверное уже после того как 
      clearTimeout(timer);
      timer = null;
    }, ms);
  };
}

export default function App() {
  const [value, setValue] = useState('');

  const handleChange = e => {
    const {value} = e.target;
    delayHandler(value);
  };

  const delayHandler = debounce(value=>{
    setValue(value);
    alert(value);
  }, 2000);

  return (
    <div className="App">
      <p>Current value: {value}</p>
      <form>
        <input onChange={handleChange} />
      </form>
    </div>
  );
}


не совсем уверен чего вы хотите добиться, но мне кажется должно вообще быть как-то так:
function debounce(fn, ms) {
  return (...args) => {
    setTimeout(() => {
      fn.apply(this, args);
    }, ms);
  };
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
summer Ярославль
от 100 000 до 140 000 ₽
КРАФТТЕК Санкт-Петербург
от 60 000 до 80 000 ₽
19 апр. 2024, в 23:00
5000 руб./за проект
19 апр. 2024, в 20:43
20000 руб./за проект