如何从多个字段中获取相同输入类型的值?

时间:2018-05-29 12:20:56

标签: reactjs react-dom react-fullstack react-state-management

我必须从相同的输入类型(例如:电子邮件类型)获取值,这是在我的render()方法中:

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

我没有限制。 state值,handleChange,addMemberHandler方法

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

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

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

我的问题是:如何在我的状态下获取所有电子邮件(用户输入的内容),以便onSubmit我会将所有电子邮件发送到数组中?

基本上我如何动态地为每封电子邮件维护不同的状态?

1 个答案:

答案 0 :(得分:1)

您只为多个状态提供一个状态字段。这不行。您可以拥有多个字段,例如state.email1state.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