【发布时间】:2018-09-07 13:25:04
【问题描述】:
在使用与 redux 集成的反应导航时,我正在关注试图处理 Android 后退按钮的文档。
当前按下后退按钮会退出整个应用程序,无论您按下它。我试图通过在 Root 组件上添加处理程序来按照指南处理后按:
const persistConfig = {
key: 'root',
storage,
blacklist: ['nav'],
};
const AppNavigator = createStackNavigator(
{
SelectScreen,
PageScreen,
SettingsScreen,
},
{
initialRouteName: 'SelectScreen',
},
);
const navReducer = createNavigationReducer(AppNavigator);
const appReducer = combineReducers({
nav: navReducer,
theme: themeReducer,
page: pageReducer,
});
const persistedReducer = persistReducer(persistConfig, appReducer);
const middleware = createReactNavigationReduxMiddleware('root', state => state.nav);
const App = reduxifyNavigator(AppNavigator, 'root');
const mapStateToProps = state => ({
state: state.nav,
});
const AppWithNavigationState = connect(mapStateToProps)(App);
const store = createStore(persistedReducer, applyMiddleware(middleware));
const persistor = persistStore(store);
class Root extends React.Component {
componentDidMount() {
BackHandler.addEventListener("hardwareBackPress", this.onBackPress);
}
componentWillUnmount() {
BackHandler.removeEventListener("hardwareBackPress", this.onBackPress);
}
onBackPress = () => {
const { dispatch, nav } = this.props;
if (nav.index === 0) {
return false;
}
dispatch(NavigationActions.back());
return true;
};
render() {
return (
<Provider store={store}>
<PersistGate loading={null} persistor={persistor}>
<AppWithNavigationState />
</PersistGate>
</Provider>
);
}
}
AppRegistry.registerComponent(appName, () => Root);
但是,我收到一个错误,因为导航道具在根组件中不存在。由于我缺乏理解,我知道这可能是一个错误,因此我非常感谢有关如何使其正常工作的一些帮助!
谢谢
【问题讨论】:
标签: reactjs react-native redux react-navigation