this.setState не может установить состояние внутри, если условие ReactJS

#reactjs

Вопрос:

У меня ниже приведен код проверки формы в react:

 validateRegister=()=gt;{ var flag=false;  if(this.state.username.lengthlt;3)  {this.setState({...this.state,nameError:'Name must be atleast 3 characters long!'});flag=true;}   if(this.state.address.length==0)  {this.setState({...this.state,addressError:'Address cannot be empty!'});flag=true;}   if(this.state.phone.length!=10)  {this.setState({...this.state,phoneError:'Phone no should be 10 digits long!'});flag=true;}   if(this.state.email=='')  {this.setState({...this.state,emailError:'Email cannot be empty!'});flag=true;}   if(!this.state.password.lengthgt;=8||!this.state.password.lengthlt;=12)  {this.setState({...this.state,passError:'Password should be between 8-12 characters!'});flag=true;}   setTimeout(()=gt;{console.log(this.state);},2000);  return flag; }  

Что делает этот код, так это то, что он устанавливает ошибку всякий раз, когда какое-либо поле не соответствует требуемым критериям. Теперь проблема в том, что если я отправлю форму без заполнения какого-либо поля, то что должно было быть сделано, так это то, что все ошибки должны были быть установлены. Но вместо этого происходит то, что установлена только ошибка пароля(последняя), а все остальные ошибки пусты. setTimeout Это следует из функции, в которой я вижу, что установлена только ошибка передачи.

 username: "" password: "" address: "" phone: "" email: "" passError: "Password should be between 8-12 characters!" emailError: "" nameError: "" phoneError: "" addressError: "" redirect: false  

Может ли кто-нибудь помочь мне решить эту проблему? Я не получаю абсолютно никакого представления об этом.

Спасибо!

Комментарии:

1. Это происходит потому, что настройка состояния является асинхронной операцией. Поэтому из-за этого он обновляет только последнее условие.

2. Спасибо за комментарий. Но я думаю, что причина в чем-то другом.

3. Попробуйте изменить порядок условий if, и вы увидите, что условие, которое, наконец, будет иметь правильные значения.

4. Попробуйте вычислить все ошибки за один раз и установить ошибки, но это может преодолеть вашу асинхронную операцию. Если вы хотите запустить какую-либо функцию после обновления, используйте this.setState({...this.state, errors}, yourfunction});

5. Я нашел проблему. Я удалил this.state , и все сработало как по волшебству