Обработчик onSubmit компонента React Form не работает
у меня есть следующий компонент React:
class Form extends React.Component {
handleSubmit(e) {
e.preventDefault();
let loginInput = ReactDOM.findDOMNode(this.refs.login);
// change Main component's state
this.props.addCard(loginInput.value);
// reset the form
loginInput.value = '';
}
render() {
return(
<form onSubmit={this.handleSubmit}>
<input placeholder="githug login" ref="login" />
<button>Add Login</button>
</form>
);
}
}
как вы можете видеть, я хочу handleSubmit функция, вызываемая при отправке формы. Я указал на это, добавив функцию в onSubmit обработчик.
функция вызывается в нужное время. Однако значение this в том, что функция null. Это меня удивляет, так как я ожидал значения this быть компонентом React. Дело в том, что this is null is удивительно для меня, потому что я использую очень похожую логику / код, как предлагает официальная документация React.
буду признателен за помощь в выяснении, почему this не является компонентом React, как ожидалось, и как исправить код, чтобы он был.
1 ответов
при использовании React С ES2015 classes вы должны установить this для обработчиков событий
class Form extends React.Component {
constructor(props) {
super(props);
this.handleSubmit = this.handleSubmit.bind(this);
}
handleSubmit(e) {
e.preventDefault();
let loginInput = this.refs.login;
this.props.addCard(loginInput.value);
loginInput.value = '';
}
render() {
return(
<form onSubmit={ this.handleSubmit }>
<input placeholder="githug login" ref="login" />
<button>Add Login</button>
</form>
);
}
}
методы следуют той же семантике, что и обычные классы ES6, что означает, что они не привязывают это автоматически к экземпляру. Тебе придется явно использовать. bind (this) или функции стрелки =>.