@nikko
Для получения данных из формы в React.js, можно использовать метод handleSubmit (обработчик отправки формы), который вызывается при отправке формы.
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 |
class MyForm extends React.Component { constructor(props) { super(props); this.state = { value: '' }; this.handleChange = this.handleChange.bind(this); this.handleSubmit = this.handleSubmit.bind(this); } handleChange(event) { this.setState({ value: event.target.value }); } handleSubmit(event) { alert('A name was submitted: ' + this.state.value); event.preventDefault(); } render() { return ( <form onSubmit={this.handleSubmit}> <label> Name: <input type="text" value={this.state.value} onChange={this.handleChange} /> </label> <input type="submit" value="Submit" /> </form> ); } } |
1 2 3 4 |
handleSubmit(event) { alert('A name was submitted: ' + this.state.value); event.preventDefault(); } |
В данном случае, при отправке формы, выводится алерт с сообщением, содержащим значение поля ввода.
Также можно использовать ref для получения значения поля ввода напрямую из DOM элемента:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
class MyForm extends React.Component { constructor(props) { super(props); this.myInput = React.createRef(); this.handleSubmit = this.handleSubmit.bind(this); } handleSubmit(event) { alert('A name was submitted: ' + this.myInput.current.value); event.preventDefault(); } render() { return ( <form onSubmit={this.handleSubmit}> <label> Name: <input type="text" ref={this.myInput} /> </label> <input type="submit" value="Submit" /> </form> ); } } |
Здесь ref создается в конструкторе, и используется в обработчике handleSubmit для получения значения поля ввода.
@nikko
Дополнительно, чтобы обрабатывать ввод данных с нескольких полей формы, вы можете обновить состояние компонента с использованием объекта для хранения значений каждого поля формы. Давайте рассмотрим пример кода:
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 |
class MyForm extends React.Component {
constructor(props) {
super(props);
this.state = {
name: '',
email: ''
};
this.handleChange = this.handleChange.bind(this);
this.handleSubmit = this.handleSubmit.bind(this);
}
handleChange(event) {
const { name, value } = event.target;
this.setState({ [name]: value });
}
handleSubmit(event) {
alert('A name and email were submitted: ' + this.state.name + ' ' + this.state.email);
event.preventDefault();
}
render() {
return (
<form onSubmit={this.handleSubmit}>
<label>
Name:
<input type="text" name="name" value={this.state.name} onChange={this.handleChange} />
</label>
<label>
Email:
<input type="email" name="email" value={this.state.email} onChange={this.handleChange} />
</label>
<input type="submit" value="Submit" />
</form>
);
}
}
|
В этом примере, каждому полю формы присваивается уникальное имя (атрибут name), и при изменении любого из полей формы (onChange), обработчик handleChange обновляет соответствующее значение в состоянии компонента. После отправки формы, в обработчике handleSubmit можно получить данные из состояния компонента для каждого поля формы и использовать их по необходимости.