Слушатели событий в этом случае не нужны.
Прежде всего, настройте enterKeyPress
, чтобы не создавать прослушиватель событий.Если вы не связали функцию в своем конструкторе, тогда вы можете преобразовать enterKeyPress в функцию стрелки:
enterKeyPress = (e) => {
if (e.keyCode === 13) {
console.log('enter key pressed!');
e.preventDefault();
this.loginUser();
});
}
Преобразование enterKeyPress
в функцию стрелки - это один из способов охвата функции компонентом.Другой вариант - привязка функции в вашем конструкторе или в функции render
, что хорошо описано в других местах.Если вы уже связали функцию в своем конструкторе (вы не включили ее здесь), то вы можете игнорировать эту часть.
Во-вторых, отрегулируйте вашу подпрограмму onKeyPress так, чтобы она передавала функцию, а не вызывала ее:
<Input
type="password"
placeholder="Password"
onChange={e =>
this.setState({ password: e.target.value })
}
onKeyPress={this.enterKeyPress}
/>
Стоит также отметить, что здесь есть еще одна общая ошибка JavaScript: использование функции анонимного обратного вызова в прослушивателе событий.Используя анонимную функцию, вы разрешаете добавление одной и той же функции несколько раз, поскольку каждый раз создается ссылка на другую функцию.Это также означает, что вы не сможете удалить его позже, так как для этого вам потребуется ссылка на функцию.
Опять же, здесь вам не нужен прослушиватель событий, , но если вы сделали , вам, вероятно, следует определить обратный вызов в области видимости компонента, чтобы вы могли удалить его в более поздний момент,Общий шаблон для использования прослушивателей событий выглядит следующим образом:
handleKeyPress = (e) => {
if (e.keyCode === 13) {
console.log('enter key pressed!');
e.preventDefault();
this.loginUser();
});
}
componentDidMount() {
window.addEventListener("keypress", this.handleKeyPress);
}
componentWillUnmount() {
window.removeEventListener("keypress", this.handleKeyPress);
}