Оператор == всегда предназначен для сравнения ссылок на объекты, тогда как метод сравнения строк .equals () переопределяется для сравнения содержимого:
String s1 = new String("abc");
String s2 = new String("abc");
System.out.println(s1 == s2); // It prints false (reference comparison)
System.out.println(s1.equals(s2)); // It prints true (content comparison)
Вы можете использовать async await в handleLogin (). Таким образом, login () будет вызываться только после разрешения обещания signUp ().
async handleLogin(){
const { name, email, password} = this.props;
await this.props.signUp( name, email, password)
await this.props.login(email, password)
this.props.navigtion.navigate('Home')
}
Другим способом было бы поместить login () в .then
функции signUp (). Это будет работать так же, как асинхронное ожидание. Имя входа () будет вызвано после разрешения функции signUp (). Затем вы можете поместить navigate () в .then
login (), если вы хотите перемещаться только после того, как пользователь вошел в систему.
handleLogin(){
const { name, email, password} = this.props;
this.props.signUp( name, email, password)
.then(this.props.login(email, password)
.then(this.props.navigtion.navigate('Home'))
)
}
Надеюсь, это поможет.
Вот как я это сделал, и все это работает, но я не уверен, что это нормально с точки зрения лучшей практики и ясного синтаксиса.
Когда пользователь нажимает кнопку, он запускается _handleSignup () после проверки всех входов и выполняет асинхронную функцию шаг за шагом.
async _handleSignup() {
const { name, email, password, passwordConfirm, phone } = this.props;
if (name.length === 0 && email.length === 0) {
Alert.alert('Make sure all inputs is filled');
return;
} else if (password !== passwordConfirm) {
Alert.alert('Password not match');
return;
}
await this.props.signUp(name, email, password)
await this.props.login(email, password).then(
Alert.alert('Account created', [
{
text:'Login',
onPress: ()=> this.props.navigation.navigate('Category')
}
])
)
}