React Native Android 返回键退出应用程序

3
我希望在一个组件上实现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();

  }

但是它会立即关闭应用程序。

我该如何实现?


当您启动应用程序时,此屏幕是否已挂载?还是它尚未推入堆栈中? - parohy
我在启动画面显示时检查用户是否有令牌,并将其重定向到此组件或登录组件。 - Abdul-Elah JS
你是如何挂载屏幕的?根据你所使用的导航库文档,进行替换/重置即可设置根屏幕。然后就不需要在后退处理程序中进行任何更改了。 - parohy
确切地说,那就是我想要实现的。 - Abdul-Elah JS
你使用的导航库是什么? - parohy
显示剩余8条评论
3个回答

4

由于我还不能添加评论 - 补充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-Navigation,请看这里。如果你遇到了跟踪当前屏幕的问题,我建议你开一个新的帖子。

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

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

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

    return true;
};

现在它可以从任何组件退出应用程序了!我添加了 BackHandler.exitApp() 并且它在我访问的每个组件上都运行。 - Abdul-Elah JS

0

它给我一个错误:“对象不是函数(评估'subscriptions [i]()')!” - Abdul-Elah JS

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接