我正在尝试编写登录页面,但setState的异步性质使这非常困难。React登录页面
提交打印出状态后,将旧值设置为初始状态,而不是使用表单值更新状态。
我知道setState是异步的,并且不能保证状态会得到更新,所以我的选择是什么?我怎样才能确保提交将获得新的价值?
有没有比这更好的方法?
下面的代码。
var Login = React.createClass({
getInitialState: function() {
return {
name: '',
password: ''
}
},
handleSubmit: function(e) {
e.preventDefault();
var msg = {
name: this.state.name,
password: this.state.password
}
// name and password are not updated
console.log(msg)
},
handleChange: function(value, e) {
this.setState({ value: e.target.value })
},
render: function() {
return (
<div>
<form onSubmit={this.handleSubmit}>
<Form horizontal>
<FormGroup controlId="formHorizontalName">
<Col componentClass={ControlLabel} sm={1}>
Name
</Col>
<Col sm={3}>
<FormControl type="text" placeholder="Name" value={this.state.name} onChange={this.handleChange.bind(this, 'name')}/>
</Col>
</FormGroup>
<FormGroup controlId="formHorizontalPassword">
<Col componentClass={ControlLabel} sm={1}>
Password
</Col>
<Col sm={3}>
<FormControl type="password" placeholder="Password" value={this.state.password} onChange={this.handleChange.bind(this, 'password')}/>
</Col>
</FormGroup>
<FormGroup>
<Col smOffset={1} sm={3}>
<Checkbox>Remember me</Checkbox>
</Col>
</FormGroup>
<FormGroup>
<Col smOffset={1} sm={3}>
<Button type="submit">
Sign in
</Button>
</Col>
</FormGroup>
</Form>
</form>
</div>
);
}
});
module.exports = Login;
你可以添加一个'的console.log({值:e.target.value})上'handleChange' – Arthur
'如果在FormControls名称,密码值字段它打印出来只有最后一个字母,否则它会打印到目前为止写入的整个字符串。相当令人费解。 – user3454914