Реагируйте на навигацию 3: кнопка «Назад» в Android не возвращает к предыдущему экрану - PullRequest
2 голосов
/ 06 апреля 2019

Я обновляю конфигурацию своего маршрутизатора моего приложения React Native с помощью React Navigation 3, и теперь многое улучшилось, но я не понимаю, почему, когда я нажимаю кнопку «Назад» в Android, я не отправляюсь в предыдущее представление ивместо этого отправляет меня в Home.

Мои маршруты

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('...') для навигации, потому что нажатие не работает.

Знаете ли вы, почему?

Я использую реагировать на навигацию 3.5.1 и реагировать на родной 0.59.3

Ответы [ 2 ]

0 голосов
/ 09 апреля 2019

Я только что понял.

Я не писал правильную конфигурацию для моих маршрутов, потому что, если я хотел вернуться из Job в Jobs вместо Home, стек был необходим для каждого "стека" представлений, которые янужно, так что теперь они могут работать именно так, как я хочу, поп работает отлично, не используя событие обратного обработчика.

Вот так:

// Jobs stack
const JobsStack = createStackNavigator(
    {
        JobList: {
            screen: Jobs,
        },
        Job: {
            screen: Job,
        },
    },
    {
        headerMode: 'none',
    }
);

// Main drawer
const MainDrawerNavigator = createDrawerNavigator(
    {

        ...
        Jobs: JobsStack,
        Contact: {
            screen: Contact
        }
        ...
    },
    drawerConfig,
);

Спасибо всем людям, которые помоглия:)

0 голосов
/ 08 апреля 2019

Вы можете импортировать BackHandler из'act-native 'и использовать код, подобный приведенному ниже, в своем классе экрана, откуда вы хотите вернуться:

componentWillMount() {
    BackHandler.addEventListener('hardwareBackPress', this.handleBackButton);
}

componentWillUnmount() {
    BackHandler.removeEventListener('hardwareBackPress', this.handleBackButton);
}

handleBackButton = () => {
    this.props.navigation.goBack();
    return true;
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...