Доступ к локальной функции внутри события window.onkeydown - PullRequest
4 голосов
/ 29 июня 2019

Пытаюсь вызвать одну из моих функций внутри этой функции window.onkeydown, но я вне ее.Любые идеи, что я могу сделать?

componentDidMount() {
  setTimeout(() => {
    window.onkeydown = function(e) {
      if (e.keyCode === 13) {
        console.log("Enter detected");
        // this.handleNextCard(); // this function will throw an error: undefined
      }
    };
  }, 250);
}

componentWillUnmount() {
  window.onkeydown = null;
}

handleFlipCard() {
  this.props.toggleViewAnswer();
}

handleNextCard() {
  this.props.selectNextCard();
}

render(){}

Ответы [ 2 ]

2 голосов
/ 29 июня 2019

Попробуйте использовать другую функцию стрелки для обработчика keydown - он унаследует свои this:

window.onkeydown = e => {
  if (e.keyCode === 13) {
    console.log("Enter detected");
    this.handleNextCard();
  }
}
1 голос
/ 29 июня 2019

Перед функциями стрелок это можно сделать следующим образом:

 componentDidMount() {
  setTimeout(() => {
    var that = this;
    window.onkeydown = function(e) {
      if (e.keyCode === 13) {
        console.log("Enter detected");
        that.handleNextCard(); 
      }
    };
  }, 250);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...