Обработчик 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) или функции стрелки =>.