Вам не нужно устанавливать timer
внутри return
часть debounce
.
Другое дело, каждый раз, когда вы попадаете внутрь функции debounce
, вам назначается новый var timer
, поэтому проверка if (timer)
сразу после того, как никогда не будет применяться
// inside contructor
this.timerRef = React.createRef(null) // for react version > 16.3
debounce(func) {
if (this.timerRef.current) clearTimeout(this.timerRef.current);
this.timerRef.current = setTimeout(func, 100);
}
Edit
Потому что вы хотите передать параметр функции прослушивателя событий (и необходимо использовать ()
активация), вы предполагаете принять всю функцию как обратный вызов
window.addEventListener(
"resize", () => //adding () =>
this.debounce(() => {
this.updateDimensions();
})
);
или внутри debounce
вы можете напрямую ссылаться на this.updateDimensions
, и больше нет необходимости передавать func
и можно сделать как
window.addEventListener("resize", this.debounce)
без активации debounce()