Я слежу за документами, пытающимися обработать кнопку возврата Android при использовании реагирующей навигации, интегрированной с redux.
В настоящее время нажатие кнопки возврата завершает работу всего приложения, где бы вы его ни нажимали. Я попытался обработать нажатие назад, следуя инструкциям, добавив обработчик в компонент 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);
Однако я получаю сообщение об ошибке, поскольку в корневом компоненте не существует навигационных реквизитов. Я знаю, что это, вероятно, ошибка из-за моего непонимания, поэтому я очень признателен за помощь в том, как заставить это работать!
Спасибо