const RootNav = createStackNavigator(
{
Splash: {
screen:Splash
},
BeforeLogin: {
screen:BeforeLogin
},
Signin: {
screen:Signin,
},
Signup: {
screen:Signup
},
Tabs: {
screen:TabHolder,
},
ForgotPassword: {
screen:ForgotPassword
},
} );
我在BeforeLogin
屏幕中使用这个componentWillMount
。我想在用户按下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)
,因为在登录屏幕中,我有一个文本没有帐户?立即注册,导航到"注册"屏幕。
和一个已经有帐户?立即在我的"注册"屏幕上登录,该屏幕将导航到"注册屏幕"。
到目前为止,我尝试了所有的代码,当我在BeforeLogin
屏幕上按下android后退按钮时,我现在无法关闭应用程序。
我在goBack(null) too, it takes me to the
Splashscreen when I press android back button from
BeforeLogin`屏幕上尝试过。
**********************第二种选择也不起作用**********************
我在Signup
和Signin
屏幕中使用了this.props.navigation.pop(1);
。当我从BeforeLogin
屏幕按下android后退按钮时,它会将我带到Splash
屏幕。
请帮忙。
更新代码
请查看下面的链接。这是我问题的密码。https://gist.github.com/shubham6996/2c69f5a270d88c710ab61487639bf1af
在点击后想要关闭屏幕的屏幕中(我假设在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 Navigation中的工作方式,您不能依赖React的常规生命周期(事实上,它们只获得一次生命周期,因为它们仍然安装在下面)。因此,基本上您需要依赖导航本身发送的特殊事件。