@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
можно получить данные из состояния компонента для каждого поля формы и использовать их по необходимости.