Как сбросить стек со страницы «Больше» в реагирующей навигации? - PullRequest
0 голосов
/ 06 мая 2019

У меня есть bottomTabNavigator, который имеет 5 экранов, все из которых связаны с собственным стеком.5-й стек - это «больше».Когда я нахожусь на странице в стеке «more», я хочу иметь возможность щелкнуть обратно на одну из других вкладок и очистить стек, чтобы при возврате к «more» он начинался с вершины стека, а непоследняя посещенная страница.

Я пробовал несколько решений, найденных в переполнении стека, но ни одно из них не сработало.Пара, кажется, из устаревшей версии реагировать навигации.

Есть ли способ, которым я могу это сделать?

Я пробовал это ...

const MainTabNavigator = createBottomTabNavigator({
    Home: {
        screen: HomeStack,
      },

    ... other screens ...

    More: {
        screen: MoreStack,
        navigationOptions: {
          tabBarOnPress: ({navigation}) => {

             if  (!navigation.isFocused) {
               navigation.dispatch(resetAction)
             }

            }
        },
      }

... но это не работает для меня.Мое resetAction выглядит следующим образом ...

const resetAction = StackActions.reset({
  index: 0,
  actions: [NavigationActions.navigate({ routeName: 'MainTabNavigator' })],
})

Я пробовал другие способы сброса действия из ответов на переполнение стека, но ни один из них не сработал.

1 Ответ

1 голос
/ 07 мая 2019

Вы можете использовать popToTop() в tabBarOnPress.

Однако это работает правильно только применительно к каждой вкладке, поэтому, если есть вкладка, в которой вы бы предпочли сохранить последний посещенный экран, то это решение не будет работать.

YourRouteName: {
  screen: YourStack,
  navigationOptions: {
    tabBarOnPress: ({ navigation }) => {
      navigation.navigate({
        routeName: navigation.state.routeName,
        action: navigation.popToTop()
      })
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...