我使用react-native v0.44.0
和redux v5.0.5
构建了一个react-navigation v1.0.0-beta.11
的应用。路由使用嵌套导航器,一个主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设备或模拟器上的硬件后退按钮时,我可以看到感谢redux-logger
和React Native调试器,导航操作被正确调度并显示之前显示的屏幕,但应用程序仍然关闭。当我将handleBack
方法更改为类似的内容时,也会发生这种情况:
handleBack() {
return true;
}
每次按下硬件后退按钮,应用程序仍会关闭。我在node_modules/react-native/Libraries/Utilities/BackHandler.android.js
中进行了一些步骤调试,在RCTDeviceEventEmitter.addListener
内部我可以看到我的事件监听器已经注册,并且invokeDefault
在循环中设置为true
。 addListener
已退出,但应用仍会关闭。有没有人知道是否有一点反应 - 导航和redux覆盖了某些顶级硬件后退按钮的行为我不知道?
我设置了第二个没有react-navigation和redux的普通RN项目,实现了相同的BackHandler事件监听器(也返回true),应用程序不会关闭。所以,现在这让我有些困惑。
答案 0 :(得分:0)
我正在使用react-navigation,我也处理了os后退按钮。这对我来说可以。 也许你可以尝试一下。请注意,如果您执行除关闭应用程序之外的任何其他任务,则handleBack必须返回true。如果没有,它会立即关闭应用程序。
componentWillMount() {
BackHandler.addEventListener(HARDWARE_BACK_PRESS, () => { return this.handleBack.bind(this)() });
}
答案 1 :(得分:0)
我遇到了同样的问题,返回true
无法更新。更改后再次运行react-native run-android
为我解决了问题。