_onPressButton =(username) =>{
// alert("bye")
this.props.navigation.navigator('Loc');
}
loginuser = (username, password) =>{
Parse.User.logIn(username, password, {
success: (user) => {
// Do stuff after successful login.
//
this._onPressButton(username);
alert("hello")
},
error: (user, error) => {
// The login failed. Check error to see why.
alert("Error: " + error.code + " " + error.message);
}
});
}
render(){
let { username } = this.state.username;
return(
<View style= {styles.container}>
<TextField
inputContainerStyle = {{ justifyContent: 'center', marginTop:30,marginLeft:50, marginRight:50, }}
inputStyle = {{textAlign: 'center',justifyContent: 'center', backgroundColor: 'rgba(255,255,255,0.5)'}}
titleTextStyle = {{ textAlign: 'center',justifyContent: 'center', }}
label='Username'
value = {this.state.username}
onChangeText = { (username) => this.setState({ username}) }
/>
<TextField
inputContainerStyle = {{ justifyContent: 'center', marginTop:0,marginLeft:50, marginRight:50, }}
inputStyle = {{textAlign: 'center',justifyContent: 'center', backgroundColor: 'rgba(255,255,255,0.5)'}}
titleTextStyle = {{ textAlign: 'center',justifyContent: 'center', }}
label='Password'
secureTextEntry = {true}
value = {this.state.password}
onChangeText = { (password) => this.setState({ password}) }
/>
<View>
<TouchableOpacity
style = {styles.loginScreenButton}
// onPress = {() => this._onPressButton()}
onPress = {() => this.loginuser(this.state.username, this.state.password)}
underlayColor='#fff'>
<Text
style = {styles.loginText}> Login </Text>
</TouchableOpacity>
</View>
</View>
);
}
}
export default Project = createStackNavigator({
Login: { screen: Login },
Loc: { screen: Loc}
});
ОБНОВИТЬ
Я могу вызвать _onPressButton () из функции loginuser (имя пользователя, пароль) с помощью стрелочных функций '=>', но this.props.navigation.navigator ('Loc') не работает. alert ("пока") работает нормально, но this.props.navigation.navigator ('Loc'); не выполняется. Может быть, из-за привязки this. Кто-нибудь может мне с этим помочь?
P.S 'Loc' - это еще один класс, который отображает текущее местоположение и печатает его.
onPress = {() => this.loginuser (this.state.username, this.state.password)}



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы можете использовать стрелочные функции как для метода вашего класса, так и для обратных вызовов success / error, чтобы вместо этого получить значение this включающего контекста выполнения. Поскольку вы не используете await, вы также можете пропустить ключевое слово async.
loginuser = (username, password) => {
Parse.User.logIn(username, password, {
success: (user) => {
// Do stuff after successful login.
this._secondFunction();
},
error: (user, error) => {
// The login failed. Check error to see why.
alert("Error: " + error.code + " " + error.message);
}
});
};
Я внес эти изменения и все заработало, но вместо this._secondFunction (); я хочу использовать this.props.navigation.navigator ('Loc') ", и он ничего не делает внутри параметра успеха
@sap Хорошо, это расстраивает. Не могли бы вы включить в свой вопрос весь свой компонент и родительский компонент? Иначе будет сложно сказать, что не так.
Приносим извинения за неудобства. Я обновил код сейчас!
@sap success вообще запускается? Попробуйте вставить туда console.info или что-то в этом роде.
Да, успех идет нормально, даже _onPress был вызван после того, как вы предложили функции стрелок. (предупреждение в onpress () работает, а навигация - нет). Это проблема с использованием this внутри этой функции?
@sap _onPressButton также является стрелочной функцией, поэтому this должен быть именно таким, как вы ожидаете. Разве не this.props.navigation.navigate вместо this.props.navigation.navigator?
Боже, как я могу скучать по этому! Извините, что беспокою вас! Так что главным было использование стрелочных функций! Он работает! Большое спасибо за уделенное время
Можете ли вы показать вызов функции входа в систему, используется ли она
=>или как обратный вызов?