React本机Android BackHandler退出应用程序

React本机Android BackHandler退出应用程序,android,reactjs,react-native,react-native-android,Android,Reactjs,React Native,React Native Android,我想实现BackHandler在一个组件上运行,并保留应用程序其余部分中硬件后退按钮“转到上一屏幕”的默认行为,我有一个名为“cases.js”的组件,如果用户在屏幕上单击后退按钮,我想退出应用程序;如果用户在任何其他组件上,我想返回,则cases屏幕位于登录屏幕上方 以下是我在“cases.js”文件中尝试的内容: componentDidMount = async () => { await BackHandler.addEventListener('hardwareBa

我想实现BackHandler在一个组件上运行,并保留应用程序其余部分中硬件后退按钮“转到上一屏幕”的默认行为,我有一个名为“cases.js”的组件,如果用户在屏幕上单击后退按钮,我想退出应用程序;如果用户在任何其他组件上,我想返回,则cases屏幕位于登录屏幕上方

以下是我在“cases.js”文件中尝试的内容:

  componentDidMount = async () => {

    await BackHandler.addEventListener('hardwareBackPress', this._closeApp())

  }

  componentWillUnmount = async () => {

    await BackHandler.removeEventListener('hardwareBackPress', this_closeApp());

  }

  _closeApp = async () => {

    BackHandler.exitApp();

  }
但它会立即关闭应用程序

我怎样才能做到这一点

addreturntrue;to_closeApp方法

此链接可以为您提供很多帮助:

因为我还不能添加评论-添加到Mahdi Bashirpour的答案中,这是正确的:

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

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

handleBackButton = () => {
    //add your code

    return true;
};
这段代码可以工作,但正如您所注意到的,一旦在登录屏幕上添加EventListener,它将影响堆栈中更深的所有其他屏幕,这些屏幕不会覆盖BackHandler EventListener

解决此问题的最佳方法是添加另一个条件,检查您是否在登录屏幕中:

handleBackButton = () => {
    if (screen == 'Login') {
    BackHandler.exitApp();
    return true;
    }
};
如何检查您在哪个屏幕上?假设您正在使用React导航,请看一看。
如果您在跟踪当前屏幕时遇到问题,我建议您打开一个新线程。

启动应用程序时是否会挂载此屏幕?或者它还没有被推到堆栈中?当启动屏幕显示时,我检查用户是否有令牌,并将其重定向到该组件或登录组件。因此,当您登录时,例如,它关闭应用程序,并应将您返回到上一屏幕,对吗?否,当我登录时,我不想返回登录屏幕,我想退出应用程序。。否则,我希望返回按钮重定向到上一页您如何安装屏幕?只需根据您使用的导航库文档进行替换/重置,即可设置根屏幕。您不需要对backhandlerit’s giving me error对象进行任何更改,它不是一个计算“订阅[i]”的函数!现在它正从任何组件退出应用程序!我添加了BackHandler.exitApp,它在我访问的每个组件上运行
componentWillMount() {
    BackHandler.addEventListener('hardwareBackPress', this.handleBackButton);
}

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

handleBackButton = () => {
    //add your code

    return true;
};
handleBackButton = () => {
    if (screen == 'Login') {
    BackHandler.exitApp();
    return true;
    }
};