Как получить данные с react.js формы?

Пользователь

от nikko , в категории: JavaScript , год назад

Как получить данные с react.js формы?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от marisa , год назад

@nikko 

Для получения данных из формы в React.js, можно использовать метод handleSubmit (обработчик отправки формы), который вызывается при отправке формы.

  1. Добавьте обработчик отправки формы в компонент формы:
 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. В обработчике handleSubmit можно получить данные из состояния компонента, которое было обновлено при изменении поля ввода:
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 для получения значения поля ввода.

Пользователь

от camren , 8 дней назад

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