Как получить значения из одного и того же типа ввода из нескольких полей в React?

Мне нужно получить значения из того же типа ввода (например, типа электронной почты), это в моем методе render ():

            <TextField
              value = {email}
              className = {classes.textField}
              onChange = {this.handleChangeEvent('email')}
            />
            <TextField
              value = {email}
              className = {classes.textField}
              onChange = {this.handleChangeEvent('email')}
            />
            <TextField
              value = {email}
              className = {classes.textField}
              onChange = {this.handleChangeEvent('email')}
            />
            <p onClick = {this.addMemberHandler}> ADD MORE EMAIL ADDRESSES</p>

У меня этому нет предела. значения состояния, методы handleChangeEvent, addMemberHandler

          state = {
           addOneMoreEmail: false,
           emailCounter: 0,
           email: ''
         };

         handleChangeEvent = name => event => {
           this.setState({
            [name]: event.target.value
           });
         };

       addMemberHandler = () => {
         this.setState({
           addOneMoreEmail: true
         });
       };

Мой вопрос: как я могу получить все электронные письма (которые ввел пользователь) в моем состоянии, чтобы onSubmit я отправлял все электронные письма в массиве?

В принципе, как я могу динамически поддерживать разное состояние для каждого электронного письма?

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
0
0
822
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы предоставляете только одно поле состояния для нескольких состояний скважины. Это не сработает. У вас может быть несколько полей, таких как state.email1, state.email2 и т. д., Или вы можете использовать массив.

Это должно быть сделано с использованием массива писем в виде состояния:

state = {
  emails: []
}

render () {
  const emails = this.state.emails
  return (
    <div>
      {emails.map((email, index) => (
        <Textfield
          key = {index}
          value = {email}
          onChange = {event => this.setState({
            emails: [
              ...emails.slice(0, index),
              event.target.value,
              ...emails.slice(index + 1) 
            ]
          })
      ))}
      <p onClick = {() => this.setState({emails: [...emails, '']})}>add email</p>
    </div>
  )
}

Это даст вам динамический список писем, который можно расширить, щелкнув <p>.

Обратите внимание, что использование индекса в качестве ключа не рекомендуется: https://reactjs.org/docs/lists-and-keys.html.

Не могли бы вы описать дескриптор изменения? Я не могу этого понять.

Coder 29.05.2018 19:21

Функция обновляет массив state.emails в позиции "index". для обновления массива используется оператор распространения массива. developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…

lipp 05.06.2018 08:45

Другие вопросы по теме