Javascript React Native BackHandler始终关闭Android中的应用程序(硬件备份)

Javascript React Native BackHandler始终关闭Android中的应用程序(硬件备份),javascript,android,react-native,redux,react-navigation,Javascript,Android,React Native,Redux,React Navigation,我正在使用reduxv5.0.5和react-navigation v1.0.0-beta.11构建一个带有react-native v0.44.0的应用程序。路由通过嵌套的导航器、一个主堆栈导航器和抽屉导航器完成。 我在导航减缩器中处理所有导航事件,同时在Android上使用BackHandler进行硬件反压。现在是奇怪的部分(对我来说),我实现了BackHandler事件处理程序,如下所示: import { BackHandler, Modal, View } from 'react-na

我正在使用
reduxv5.0.5
react-navigation v1.0.0-beta.11
构建一个带有
react-native v0.44.0
的应用程序。路由通过嵌套的导航器、一个主堆栈导航器和抽屉导航器完成。
我在导航减缩器中处理所有导航事件,同时在Android上使用BackHandler进行硬件反压。现在是奇怪的部分(对我来说),我实现了BackHandler事件处理程序,如下所示:

import { BackHandler, Modal, View } from 'react-native';
import { NavigationActions } from 'react-navigation';    
import { HARDWARE_BACK_PRESS } from '../helpers/NavTypes';

constructor(props) {
  super(props);
  this.handleBack = this.handleBack.bind(this);
}

componentWillMount() {
  BackHandler.addEventListener(HARDWARE_BACK_PRESS, this.handleBack);
}

componentWillUnmount() {
  BackHandler.removeEventListener(HARDWARE_BACK_PRESS, this.handleBack);
}

handleBack() {
  const navAction = NavigationActions.back();

  this.props.navigation.dispatch(navAction);
  return true;
}
在我的导航减速器中,我正在处理
导航/返回
操作类型,并跟踪我的状态。现在,当我在Android设备上或在emulator中按下hardware back(硬件后退)按钮时,由于
redux logger
和React Native debugger(反应本机调试器),我可以看到导航操作已正确调度,并显示上一个屏幕,但应用程序仍然关闭。当我将
handleBack
方法更改为以下内容时,也会发生这种情况:

handleBack() {
  return true;
}
每次按下硬件后退按钮时,应用程序仍会关闭。我在
RCTDeviceEventEmitter.addListener
内部的
node\u modules/react native/Libraries/Utilities/BackHandler.android.js
中进行了一些步骤调试,我可以看到我的事件侦听器已注册,并且在循环中
invokeDefault
设置为
true
addListener
已退出,但应用程序仍将关闭。有人知道导航和redux是否在某个我不知道的顶层覆盖了硬件后退按钮的行为吗?

我已经在没有react导航和redux的情况下设置了第二个纯RN项目,实现了相同的BackHandler事件侦听器(也返回true),并且应用程序不会关闭。所以,现在这让我有点困惑。

我正在使用react导航,并且我还处理操作系统的后退按钮。这对我来说很好。 也许你可以试试这个。请注意,如果您正在执行除关闭应用程序以外的任何其他任务,handleBack必须返回true。如果没有,它将立即关闭应用程序

 componentWillMount() {
  BackHandler.addEventListener(HARDWARE_BACK_PRESS, () => { return this.handleBack.bind(this)() });
}

我也有同样的问题,返回
true
不会更新。更改后再次运行
react native run android

Hi@csath,谢谢您的回答。但这并没有改变任何事情。正如我所说,我甚至可以更改
handleBack
以始终返回
true
,并且应用程序仍将关闭。我不知道在这个过程中我可以在哪里更深入地探索这个问题。现在我正在阅读adb logcat日志,看看是否有任何关于“否决”硬件反压的暗示。我也面临着同样的问题,它对你有用吗?@Anjana Systemaix是onest,在该项目中,我们更新了一个更新的
react native
redux
react导航
版本,现在一切正常。但我已经用旧模块创建了该项目的一个分支,问题仍然存在,只要我有一些空闲时间,我会尝试找出该实现的错误。我的问题通过Victoriayangx在本链接中给出的解决方案得到了解决