2
const RootNav = createStackNavigator(
  {
    Splash: {
        screen:Splash
    },
    BeforeLogin: {
        screen:BeforeLogin
    },    
    Signin: {
        screen:Signin,
    },
    Signup: {
        screen:Signup
    },
    Tabs: {
        screen:TabHolder,
    },
    ForgotPassword: {
        screen:ForgotPassword
    },
  } );

下面是BackHandler我在BeforeLogin屏幕上使用的。

  componentWillMount() { 
    BackHandler.addEventListener('hardwareBackPress', this.handleBackButton); 
  } 

  componentWillUnmount() { 
    BackHandler.removeEventListener('hardwareBackPress', this.handleBackButton); 
  }

  handleBackButton = () => { 
    BackHandler.exitApp(); 
  }

以下是BackHandler我在我的Signin屏幕和Signup屏幕中使用的。

  componentDidMount() {
    BackHandler.addEventListener('hardwareBackPress',() => {   

      this.props.navigation.navigate('BeforeLogin');
      return true;

    });
  } 

我的BeforeLogin屏幕有 2 个按钮。登录和注册将我导航到Signin屏幕Signup

现在,我面临两种情况。

场景 1:我在BeforeLogin屏幕上,但我没有导航到任何一个SigninSignup屏幕。现在,当我按下我的 android 后退按钮时,它会关闭应用程序。BeforeLogin这就是我想要的,当用户从屏幕按下后退按钮时能够关闭应用程序。

场景 2:我在BeforeLogin屏幕上,我导航到SigninSignup屏幕。现在,当我返回BeforeLogin屏幕然后按 android 后退按钮时,应用程序现在没有关闭。

如何解决我的场景2 :?请帮忙。

4

1 回答 1

1

不要backhander不必要地使用,因为它不能在ios设备上运行。

使用导航this.props.navigation.replace("")

即,如果您从 A 导航到 B,并且不想在按下后退按钮时返回 A,请不要使用this.props.navigation.navigate("B") ,而是使用this.props.navigation.replace("B")

或者

试试 react-navigation@3.0新功能SwitchNavigator

默认情况下,当按下后退按钮时,应用程序将关闭开关导航器中使用的所有路线屏幕。因此,在 SwitchNavigator 中定义您想要退出应用程序的所有屏幕,在 StackNavigator 中定义所有其他屏幕或任何您使用的屏幕。

于 2019-02-05T08:49:03.007 回答