Реагировать на навигацию: вернуться к началу стека, но отключить «BACK» - PullRequest
0 голосов
/ 09 мая 2018

navigation flow map (Sorry, I cannot post image)

Я использую приложение React Native для Android и навигацию React. Теперь на экране 0 (S0). Затем сделал следующие навигации.

  1. this.props.navigation.navigate("S1")
  2. this.props.navigation.navigate("A1")
  3. this.props.navigation.navigate("A2")
  4. this.props.navigation.navigate("A3")

Теперь, когда действия в A3 завершены, я должен вернуться к экрану 1 (S1). Однако, если я использую this.props.navigation.navigate("S1"), то получается, что я могу нажать кнопку «Назад» (аппаратная панель или панель заголовков), и она возвращается к экрану A3.

Когда кнопка «Назад» нажата на S1, я хочу вернуться к S0. Я также не хочу устанавливать его вручную, потому что многие другие страницы могут доходить до S1.

Есть предложения или идеи, как сделать эту работу? Я пробовал popToTop() и goBack("A"), но оба не работают.

Ответы [ 2 ]

0 голосов
/ 11 мая 2018

Мне удалось сделать эту работу всего за

this.props.navigation.pop(4). Он просто вернется на 4-ю предыдущую страницу, и кнопка «Назад» все еще работает, как я и предполагал. Предложение @Bryan работает для меня в одном из случаев, но мне нужно было гораздо более общее решение: D

Спасибо, ребята, за помощь! Очень ценю это.

0 голосов
/ 09 мая 2018

Вы можете использовать NavigationActions.reset, чтобы вернуться к первому экрану, или NavigationActions.pop, чтобы «вернуться» к нужному экрану.

Пример кода для сброса навигации :

    this.props.navigation.dispatch(NavigationActions.reset({
            index: 0,
            actions: [
                    NavigationActions.navigate({ routeName: 'S0' }),
                    NavigationActions.navigate({ routeName: 'S1' }),
                    NavigationActions.navigate({ routeName: 'A1' }),
                    NavigationActions.navigate({ routeName: 'A2' }),
                    NavigationActions.navigate({ routeName: 'A3' }),
            ],
    }));

Пример кода для всплывающей подсказки:

    this.props.navigation.dispatch(NavigationActions.pop({
            n: 3,
            immediate: true
    }));

Примечание. Не забудьте импортировать {NavigationActions}

...