goBack не работает должным образом в React Navigation
const RootNav = createStackNavigator(
{
Splash: {
screen:Splash
},
BeforeLogin: {
screen:BeforeLogin
},
Signin: {
screen:Signin,
},
Signup: {
screen:Signup
},
Tabs: {
screen:TabHolder,
},
ForgotPassword: {
screen:ForgotPassword
},
} );
Я использую это componentWillMount
в BeforeLogin
экран. Я хочу закрыть приложение, когда пользователь нажимает кнопку возврата Android.
componentWillMount() { // In BeforeLogin Screen
BackHandler.addEventListener('hardwareBackPress',() => {
BackHandler.exitApp();
});
}
И в Signup
а также Signin
экран, я использую ниже componentWillMount
componentWillMount() {
BackHandler.addEventListener('hardwareBackPress',() => {
this.props.navigation.goBack();
return true;
});
}
Я не могу использовать this.props.navigation.navigate('BeforeLogin)
потому что на экране входа у меня есть текст У вас нет аккаунта? Зарегистрируйтесь сейчас, чтобы перейти к экрану регистрации.
А уже есть аккаунт? Войдите сейчас на моем экране регистрации, который переходит к экрану входа.
Со всем кодом, который я пробовал до сих пор, я не могу закрыть приложение, когда нажимаю кнопку возврата Android из BeforeLogin
экран.
Я попробовал это с goBack(null) too, it takes me to the
всплеск screen when I press android back button from
Перед тем, как войти в экран.
********************** Второй вариант, который тоже не сработал ******************** **
я использовал this.props.navigation.pop(1);
в Signup
а также Signin
Экран. Это берет меня к Splash
экран, когда я нажимаю кнопку возврата Android из BeforeLogin
экран.
Пожалуйста помоги.
ОБНОВЛЕННЫЙ КОД
Пожалуйста, проверьте ссылку ниже. Это код моего вопроса. https://gist.github.com/shubham6996/2c69f5a270d88c710ab61487639bf1af
1 ответ
На экране, с которого вы хотите закрыть экран после нажатия (я полагаю, в BeforeLogin):
constructor(props) {
super(props);
this._didFocusSubscription = props.navigation.addListener('didFocus', payload =>
BackHandler.addEventListener('hardwareBackPress', this.onBackButtonPressAndroid)
);
}
componentDidMount() {
this._willBlurSubscription = this.props.navigation.addListener('willBlur', payload =>
BackHandler.removeEventListener('hardwareBackPress', this.onBackButtonPressAndroid)
);
}
onBackButtonPressAndroid = () => {
BackHandler.exitApp();
return true;
}
Вы не можете полагаться на обычные жизненные циклы React в React Navigation из-за того, что там работает навигация по стекам (фактически они получают некоторые жизненные циклы только один раз, так как они все еще монтируются в сети). Поэтому в основном вам нужно полагаться на специальные события, которые отправляются самой навигацией.