我正在尝试检查用户集合中是否存在用户名,在检查数据的实例中,函数运行速度比调用方法快(众所周知)。当用户检查时,这导致 Session 落后一步可用性的用户名。
我被这些困扰了很长时间,如果您有解决方法,我将非常感激。
这是代码:
const ChooseUsername = React.createClass({
getInitialState() {
return {
value: ''
};
},
getValidationState() {
const value = this.state.value;
Meteor.call("userExists", value, (err, userExists) =>{
if (err){
return err;
}
else{
return Session.set('result',userExists)
}
})
if(Session.get('result'))
return "error";
else return 'success';
},
handleChange(e) {
this.setState({ value: e.target.value });
},
render() {
return (<div id="signInPage">
<div id="tutorial">
<h4>Please Choose a Username</h4>
<form>
<FormGroup
controlId="formBasicText"
validationState={this.getValidationState()}
>
<FormControl
type="text"
value={this.state.value}
placeholder="Type your username"
onChange={this.handleChange}
/>
<FormControl.Feedback />
<HelpBlock>You can't change your username later</HelpBlock>
</FormGroup>
</form>
<p><a className="btn btn-success signupButtons" href="/" role="button">See tutorial</a></p>
</div></div>);
}
});
export default ChooseUsername;
编辑:
只需使用以下代码更改 getValidationState() ,它就会像魅力一样工作。
getValidationState() {
const value = this.state.value;
Meteor.call("userExists", value, (err, userExists) =>{
if (err){
return err;
}
else{
return this.setState({userIsThere:userExists})
}
})
const userIsThere = this.state.userIsThere
if(userIsThere)
return "error";
else return 'success';
},