0

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

4

0 回答 0