繁体   English   中英

React-Native BackHandler始终在Android中关闭App(硬件返回)

[英]React-Native BackHandler always closes App in Android (hardware back)

我正在使用redux v5.0.5react-navigation v1.0.0-beta.11构建带有react-native v0.44.0的应用程序。 路由是通过嵌套的导航器,一个主StackNavigator和DrawerNavigator完成的。
我正在处理导航归约器中的所有导航事件,还使用BackHandler在Android上对硬件进行了反推。 现在是怪异的部分(对我而言),我已经实现了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;
}

在我的Navigation Reducer中,我正在处理Navigation/BACK动作类型并跟踪我的状态。 现在,当我在Android设备或仿真器上按下硬件后退按钮时,由于redux-logger和React Native调试器,我可以看到导航操作已正确分派,并且出现了上一个显示的屏幕,但是该应用程序无论如何关闭。 当我将handleBack方法更改为handleBack时,也会发生这种情况:

handleBack() {
  return true;
}

每次按下硬件后退按钮,应用程序仍然关闭。 我做了一些步调试node_modules/react-native/Libraries/Utilities/BackHandler.android.js ,里面RCTDeviceEventEmitter.addListener我可以看到我的事件侦听器进行注册和invokeDefault设置为true在循环。 addListener已退出,但该应用程序仍关闭。 有谁知道反应和导航是否有某种意义覆盖了我不知道的某个顶级硬件后退按钮的行为?
我已经设置了第二个没有react-navigation和redux的普通RN项目,实现了相同的BackHandler事件侦听器(也返回true),并且该应用程序不会关闭。 所以,现在这让我有些困惑。

我正在使用react-navigation,并且还处理了os back按钮。 这对我来说可以。 也许您可以尝试一下。 请注意,如果您执行除关闭应用程序以外的任何其他任务,handleBack必须返回true。 如果没有,它将立即关闭该应用程序。

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

我有同样的问题,返回true不会更新。 所做的更改为我解决了问题后,再次运行react-native run-android

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM