我正在尝试检查用户集合中是否存在用户名。在检查数据的实例中,函数运行速度比调用方法快(众所周知)。这个结果使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';
},