#android #reactjs #react-native #react-navigation
#Android #reactjs #react-родной #реагирующая навигация
Вопрос:
Я обновляю конфигурацию своего маршрутизатора в своем приложении React Native, используя React Navigation 3, и теперь многое было улучшено, но я не понимаю, почему, когда я нажимаю кнопку «Назад» в Android, не отправляет меня в предыдущий вид, а вместо этого отправляет меня в домашний.
Мои маршруты
const drawerConfig = {
initialRouteName: 'Home',
contentComponent: SideMenu,
drawerWidth: width,
}
const MainDrawerNavigator = createDrawerNavigator(
{
Home: {
screen: Home,
},
Company: {
screen: Company,
},
Gifts: {
screen: Gifts,
},
Jobs: {
screen: Jobs,
},
Job: {
screen: Job,
},
Contact: {
screen: Contact
}
},
drawerConfig,
);
const InitialStack = createStackNavigator(
{
Menu: {
screen: Menu,
path: 'menu/',
}
},
{
initialRouteName: 'Menu',
headerMode: 'none',
}
);
const SwitchNavigator = createSwitchNavigator(
{
Init: InitialStack,
App: MainDrawerNavigator,
},
{
initialRouteName: 'Init',
}
);
const AppContainer = createAppContainer(SwitchNavigator);
export default AppContainer;
Если я сделаю это: откройте ящик, откройте задания, затем нажмите кнопку «Задание», чтобы загрузить представление задания, поток работает хорошо, но если я нажму кнопку «Назад» в представлении задания, отображаются не задания, а главная страница.
Я использую навигацию this.props.navigation.navigate('...')
, потому что нажатие не работает.
Вы знаете, почему?
Я использую react-navigation 3.5.1 и react-native 0.59.3
Комментарии:
1. большую часть времени вы собираетесь обрабатывать
android back button
вручную … потому что этого недостаточно, чтобы зависеть от поведения по умолчанию2. Я думал, что поведение по умолчанию заключалось в том, чтобы всегда переходить к предыдущему экрану, но, похоже, я ошибался.
Ответ №1:
Я только что понял.
Я не писал правильную конфигурацию для своих маршрутов, потому что, если бы я хотел вернуться с задания на задания, а не домой, для каждого «стека» просмотров, который мне нужен, был необходим стек, так что теперь они могут работать именно так, как я хочу, pop отлично работает без использования события обратного обработчика.
Вот так:
// Jobs stack
const JobsStack = createStackNavigator(
{
JobList: {
screen: Jobs,
},
Job: {
screen: Job,
},
},
{
headerMode: 'none',
}
);
// Main drawer
const MainDrawerNavigator = createDrawerNavigator(
{
...
Jobs: JobsStack,
Contact: {
screen: Contact
}
...
},
drawerConfig,
);
Спасибо всем людям, которые мне помогли 🙂
Комментарии:
1. Спасибо! это было полезно. вы спасли мой день.
Ответ №2:
Вы можете импортировать BackHandler из ‘react-native’ и можете использовать приведенный ниже код в своем классе экрана, откуда вы хотите вернуться:
componentWillMount() {
BackHandler.addEventListener('hardwareBackPress', this.handleBackButton);
}
componentWillUnmount() {
BackHandler.removeEventListener('hardwareBackPress', this.handleBackButton);
}
handleBackButton = () => {
this.props.navigation.goBack();
return true;
};