【发布时间】:2018-03-08 15:05:05
【问题描述】:
我正在使用redux v5.0.5 和react-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/BACK 操作类型并跟踪我的状态。现在,当我在我的 Android 设备或模拟器中按下硬件后退按钮时,感谢@987654327@ 和 React Native 调试器,我可以看到导航操作已正确分派,并且出现了之前显示的屏幕,但应用程序反正关闭。当我将 handleBack 方法更改为以下内容时也会发生这种情况:
handleBack() {
return true;
}
每次按下硬件返回按钮时,应用程序仍会关闭。我在node_modules/react-native/Libraries/Utilities/BackHandler.android.js、RCTDeviceEventEmitter.addListener 内部做了一些步骤调试,我可以看到我的事件侦听器已注册并且invokeDefault 在循环中设置为true。 addListener 已退出,但应用程序仍会关闭。有谁知道 react-navigation 和 redux 是否在某些我不知道的顶层覆盖了硬件后退按钮的行为?
我已经设置了第二个没有 react-navigation 和 redux 的普通 RN 项目,实现了相同的 BackHandler 事件侦听器(也返回 true)并且应用程序不会关闭。所以,现在这让我有点困惑。
【问题讨论】:
-
我也遇到了同样的问题,对你有用吗?
-
@Anjana-Systematix 最重要的是,在那个项目中,我们更新到了更新的
react-native、redux和react-navigation版本,现在一切正常。但是我已经使用仍然存在问题的旧模块创建了该项目的一个分支,只要我有一些空闲时间,我会尝试找出该实现有什么问题。 -
我的问题已通过 Victoriayangx 在此链接github.com/facebook/react-native/issues/15497 中给出的解决方案得到解决
标签: javascript android react-native redux react-navigation