Dic*_*ens 3 javascript reactjs
我是React的新手,正在学习如何处理表单中的多个输入。这是代码:
class Login extends Component {
constructor () {
super();
this.state = {
email: '',
password: ''
};
this.handleChange = this.handleChange.bind(this);
}
handleChange (evt) {
// check it out: we get the evt.target.name (which will be either "email" or "password")
// and use it to target the key on our `state` object with the same name, using bracket syntax
this.setState({ [evt.target.name]: evt.target.value });
}
render () {
return (
<form>
<label>Email</label>
<input type="text" name="email" onChange={this.handleChange} />
<label>Password</label>
<input type="password" name="password" onChange={this.handleChange} />
</form>
);
}
}
Run Code Online (Sandbox Code Playgroud)
问题是this.setState({[evt.target.name]:evt.target.value})如何才能实现?更换几个处理程序?[evt.target.name]是否代表两个输入?
[evt.target.name]不一定代表两个输入,它仅采用事件目标的名称并将其作为键setState。
这意味着,当email表单更改时,this.setState将会执行以下操作:
this.setState({ email: evt.target.value });
Run Code Online (Sandbox Code Playgroud)
对于password这是相同的;
this.setState({ password: evt.target.value });
Run Code Online (Sandbox Code Playgroud)
因此,它不一定要替换几个处理程序,而是主要替换它们并提供一种处理事件的较短方法。(想想DNRY(不要重复自己))。
但是,表单中的许多字段都this.setState({ [evt.target.name]: evt.target.value });将按照上述说明运行。
为了进一步详细说明,以您当前的形式,使用的字段email和的字段password,将会发生以下情况;
handleChange (evt) {
this.setState({ [evt.target.name]: evt.target.value });
}
Run Code Online (Sandbox Code Playgroud)
上面的函数将获取事件的目标并提取name和value属性。因此,对于具有此更改处理程序的EACH输入,如果更改,它将功能更改为以下内容email:
handleChange (evt) {
this.setState({ email: "email@domain.com" });
}
Run Code Online (Sandbox Code Playgroud)
或即 password
handleChange (evt) {
this.setState({ password: "superstrongpassword" });
}
Run Code Online (Sandbox Code Playgroud)
或即 name
handleChange (evt) {
this.setState({ name: "John Doe" });
}
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助!
这是基本示例。
class Login extends Component {
constructor () {
super();
this.state = {
email: '',
password: ''
};
this.handleChange = this.handleChange.bind(this);
}
handleChange (evt, field) {
// check it out: we get the evt.target.name (which will be either "email" or "password")
// and use it to target the key on our `state` object with the same name, using bracket syntax
this.setState({ [field]: evt.target.value });
}
render () {
return (
<form>
<label>Email</label>
<input type="text" name="email" onChange={(event)=>this.handleChange(event, "email")} />
<label>Password</label>
<input type="password" name="password" onChange={(event)=>this.handleChange(event, "password")} />
</form>
);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
90 次 |
| 最近记录: |