Реагировать на установку размеров при изменении размера окна с помощью метода противодействия - PullRequest
1 голос
/ 18 июня 2020

Я пытаюсь установить размеры окна во время события изменения размера окна, используя метод противодействия. Кажется, что размеры устанавливаются только при первом запуске кода. Когда я пытаюсь изменить размер окна, размеры не меняются. Создаю пример песочницы https://codesandbox.io/s/react-example-ciq1l

1 Ответ

1 голос
/ 18 июня 2020

Вам не нужно устанавливать 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()

...