-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy path05-event-handler-call.jsx
41 lines (34 loc) · 1.69 KB
/
05-event-handler-call.jsx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
// Вопрос: Что не так с этим кодом?
class Form extends React.Component {
constructor(props) {
super(props);
this.state = {
errorMessage: '',
};
}
render() {
return <form onInput={this.onInput(this)} onInvalidCapture={this.onInvalid(this)}>
{this.state.errorMessage ? <blockquote>{this.state.errorMessage}</blockquote> : null}
Ваше имя: <input name="fullname" type="text" required /><br />
Ваш возраст: <input name="age" type="number" min={18} step={1} required /><br />
<button type="submit">Отправить</button>
</form>;
}
onInput() {
this.setState({ errorMessage: '' });
}
onInvalid(evt) {
evt.preventDefault();
this.setState({
errorMessage: evt.target.name === 'fullname'
? 'Введите имя, это обязательное поле'
: 'Введите возраст. Возраст не должен быть меньше 18 лет'
});
}
}
ReactDOM.render(<Form />, document.querySelector("#app"));
// Варианты ответа
// 1. Обработчики не добавляются, а вызываются, нужно убрать круглые скобки [правильный ответ]
// 2. С этим кодом всё хорошо
// 3. В onInput и onInvalid нужно передавать this.props, а не this, так работает жизненный цикл компонент
// 4. Неправильная проверка пустого состояния errorMessage в методе render. Чтобы этот код работал, errorMessage должен быть равен null