ну, похоже, delayHandler
- это не функция, которая принимает значение в качестве параметров и отправляет его на debounce
, вы должны сделать это, и он будет работать:
import React, { useState } from "react";
import "./styles.css";
function debounce(fn, ms, ...args) {
let timer;
return () => {
clearTimeout(timer);
timer = setTimeout(() => {
timer = null;
fn.apply(this, args);
}, ms);
};
}
export default function App() {
const [value, setValue] = useState("");
const handleChange = e => {
const { value } = e.target;
delayHandler(value)();
};
const delayHandler = v =>
debounce(
value => {
setValue(value);
},
2000,
v
);
return (
<div className="App">
<p>Current value: {value}</p>
<form>
<input value={value} onChange={handleChange} />
</form>
</div>
);
}
поэтому, передав v как аргумент к debounce
он применит его к функции fn
.
здесь полный пример: код