我正在使用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;
}
每次按下硬件后退按钮,应用程序仍会关闭。我做了一些步骤调试innode_modules/react-native/Libraries/Utilities/BackHandler.android.js
,在RCTDeviceEventEmitter.addListener
内部我可以看到我的事件监听器已注册,invokeDefault
在循环中设置为true
。 addListener
退出,但应用程序仍然关闭。有没有人知道是否有一点反应 - 导航和redux覆盖硬件后退按钮的行为在某些顶级我不知道?
我已经设置了第二个没有react-navigation和redux的普通RN项目,实现了相同的BackHandler事件监听器(也返回true),应用程序将不会关闭。所以,现在这让我有点困惑。
我正在使用react-navigation,我也处理os后退按钮。这对我来说可以。也许你可以尝试一下。请注意,如果您执行除关闭应用程序之外的任何其他任务,则handleBack必须返回true。如果没有,它会立即关闭应用程序。
componentWillMount() {
BackHandler.addEventListener(HARDWARE_BACK_PRESS, () => { return this.handleBack.bind(this)() });
}
我有同样的问题,返回true
不会更新。在更改后再次运行react-native run-android
为我解决了问题。