开发者问题收集

React TypeError:无法读取未定义的属性(读取‘name’)

2021-11-01
17866

我正在使用 React 和 Material UI 的 Textfield 组件。试图找到设置表单状态的最佳方法,并且冗余度最小。例如,我有 8 个不同的输入字段。而不是为每个输入设置单独的处理程序,例如 handleFirstName、handleLastName、handleEmail、handleInfo 等。

因此,为了实现这一点,我尝试创建一个如下所示的 handleChange 处理程序:

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

并且在每个组件上,

               <TextField
                className={classes.formInput}
                name="firstName"
                onChange={e => this.handleChange(e.target.value)}
                required
                id=""
                type="text"
                InputLabelProps={{
                  shrink: true,
                }}
                error={!firstName}
                helperText="Name is required"
                label="First Name"
                variant="standard" />
              <TextField
                className={classes.formInput}
                name="lastName"
                onChange={e => this.handleChange(e.target.value)}
                required
                id=""
                type="text"
                InputLabelProps={{
                  shrink: true,
                }}
                label="Last Name"
                variant="standard" />

这是我的状态对象

 constructor(props) {
    super(props);
    this.state = {
      firstName: '',
      lastName: '',
      ...,
    
    };
  }

这些只是输入字段中的两个,但还有大约 6 个字段看起来相同。有什么想法可以解决这个未定义的名称吗?

2个回答

问题是您没有传递完整的事件对象。您只传递了值。这就是您获得未定义名称的原因。

尝试将 onChange 事件更改为以下 -

onChange={this.handleChange

这样,您将在函数的 e 变量中获得完整的事件对象。

Hanly Nadackal
2021-11-01

我认为您需要处理单个功能中的多个输入字段更改。这是可行的。尝试此

520330882

最终何时将Onchange方法传递给字段使用:

931551555 >
Kena Wakwoya
2021-11-01