React native 卸载所有先前安装的屏幕,以便在按下后退出应用程序

React native 卸载所有先前安装的屏幕,以便在按下后退出应用程序,react-native,react-native-android,react-navigation,React Native,React Native Android,React Navigation,我有一个要求,当按下后退按钮时,我需要退出应用程序。基本上,我尝试了BackHandler API,它可以工作,但有一定的局限性。所以在我的例子中,我觉得最好的方法是卸载所有以前安装的组件,以便当前屏幕成为堆栈中的第一个屏幕 我有以下屏幕: 登录 OTP验证 名称 电子邮件 . . . 还有更多 我需要的是,当我在姓名屏幕上时,如果有人按下后退按钮,应用程序应该退出。但是如果有人在电子邮件屏幕上,用户应该只能返回到姓名屏幕 使用BackHandler的代码段 解决方法是在导航到名称屏幕之前重置堆

我有一个要求,当按下后退按钮时,我需要退出应用程序。基本上,我尝试了BackHandler API,它可以工作,但有一定的局限性。所以在我的例子中,我觉得最好的方法是卸载所有以前安装的组件,以便当前屏幕成为堆栈中的第一个屏幕

我有以下屏幕:

登录 OTP验证 名称 电子邮件 . . . 还有更多

我需要的是,当我在姓名屏幕上时,如果有人按下后退按钮,应用程序应该退出。但是如果有人在电子邮件屏幕上,用户应该只能返回到姓名屏幕

使用BackHandler的代码段


解决方法是在导航到名称屏幕之前重置堆栈导航器

使用react navigation中的重置操作执行此操作

实现此功能的函数的一个简单示例是——

反应导航5-使用

react导航v4.x

reset = (routeName) => {
    return this.props
               .navigation
               .dispatch(NavigationActions.reset(
                 {
                    index: 0,
                    actions: [
                      NavigationActions.navigate({ routeName })
                    ]
                  }));
  }
将其放入OTP验证屏幕,并在导航到名称屏幕时调用重置“名称屏幕”


相关答案-

您使用的是哪一版本的react导航?@LonelyCpp version 5这与版本5看起来不一样。我也不确定这是否会退出应用程序,因为我尝试了类似的东西,它总是带我进入登录屏幕。我为版本5添加了一个示例。试试看:那我该如何调用reset呢?在this.props.navigation.navigateNameScreen之前;不要打电话!重置将导航到您给它的任何屏幕。只需在屏幕上打电话;它确实完全关闭了应用程序。如果你说的是安卓系统中的最新应用,那就需要一些安卓系统特有的配置。
    import { CommonActions } from '@react-navigation/native';


    reset = (routeName) => {
        return navigation.dispatch(CommonActions.reset(
                     {
                        index: 0,
                        routes: [{ name: routeName }]
                     }
                  ));
      }
reset = (routeName) => {
    return this.props
               .navigation
               .dispatch(NavigationActions.reset(
                 {
                    index: 0,
                    actions: [
                      NavigationActions.navigate({ routeName })
                    ]
                  }));
  }