我正在制作一个注册组件,其中有 4 个字段:
- 电子邮件
- 密码
- 显示名称
- 确认密码
当我在输入字段上使用onChange函数更新值时,输入字段的电子邮件和密码正在工作,并且显示名称和确认密码不显示文本。
我不明白为什么会这样?
**SignUp.jsx**
```
class SignUp extends React.Component{
constructor(props){
super(props);
this.state={
displayName:'',
email:'',
password:'',
confirmPassword:''
}
}
handleChange = (event)=>{
const { name, value } = event.target;
this.setState({ [name]: value }, ()=>console.log(`name:${name} and value:${value} and target${event.target}`));
}
render(){
const { displayName, email, password, confirmPassword } = this.state;
return(
<>
<form onSubmit={this.handleSubmit}>
<FormInput handleChange={this.handleChange} name="email" type="email" label="email" value={email} required/>
<FormInput handleChange={this.handleChange} name="password" type="password" label="password" value={password}/>
<FormInput handleChange={this.handleChange} name="display-name" type="text" label="display name" value={displayName} required/>
<FormInput handleChange={[see the following images][1]this.handleChange} name="confirm-password" type="password" label="confirm password" value={confirmPassword}/>
<Button type="submit" value="Sign Up" input_class="signup-button"/>
</form>
</>
);
}
}
```
**FormInput.jsx**
```
const FormInput = ({handleChange, label, ...otherFormFields}) => (
<div className="group">
{label?
(<label className={`${otherFormFields.value.length? 'shrink' : ''} form-input-label`}>
{label.toUpperCase()}
</label>)
: null
}
<div>
<input className="form-input" onChange={handleChange} {...otherFormFields}></input>
</div>
</div>
)
export default FormInput;
```
when i enter the value in email text field
```
**name:email and value:q
name:email and value:qu
name:email and value:que
name:email and value:quer
name:email and value:query
name:email and value:query@
name:email and value:query@g
name:email and value:query@gm
name:email and value:query@gma
name:email and value:query@gmai
name:email and value:query@gmail
name:email and value:query@gmail.
name:email and value:query@gmail.c
name:email and value:query@gmail.co
name:email and value:query@gmail.com**
```
when i enter the value in password text field
```
**name:password and value:h
name:password and value:he
name:password and value:hel
name:password and value:hell
name:password and value:hello**
```
but when i enter the value in confirm password or display name
```
**name:display-name and value:q
name:display-name and value:w
name:display-name and value:e
name:display-name and value:r
name:display-name and value:t
name:display-name and value:y**
```
why is it overriding the value every time, and the text box remains empty.
[IMAGE]: https://i.stack.imgur.com/vxFVg.png