React Native中的BackHandler无法正常工作

时间:2019-02-05 07:57:26

标签: android reactjs react-native react-navigation react-navigation-stack

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个按钮。登录和注册,将我导航到SigninSignup屏幕。

现在,我面临两种情况。

方案1:我在BeforeLogin屏幕上,但没有导航到SigninSignup屏幕上。现在,当我按我的android back buttton时,它会关闭该应用程序。这就是我想要的,当用户在BeforeLogin屏幕上按下“后退”按钮时能够关闭该应用程序。

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

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

1 个答案:

答案 0 :(得分: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中定义其他屏幕或使用的所有屏幕。