Навигация назад в пределах реактивной навигации от одного стека к другому - PullRequest
0 голосов
/ 22 мая 2019

Есть 2 способа попасть на экран проигрывателя.

  1. Вы нажимаете на вкладку «Дополнительно», на которой есть ссылка «Команды», в которой отображаются все доступные команды.Затем вы нажимаете на команду, и вы попадаете в TeamStack.

В TeamStack по умолчанию используется Team Home, а затем множество других экранов, один из которых - Roster, в котором перечислены все игроки команды.Оттуда вы попадаете в PlayerStack, который переносит вас на домашний экран плеера.

Теперь, когда вы попадаете на экран плеера, вы можете провести пальцем, чтобы вернуться, что вернет вас оттуда, откуда вы пришли ...в реестр, затем команду Home, затем на страницу More.

Пока все хорошо!

Вы нажимаете на вкладку «Статистика», которая ссылается на StatsStack.На экране StatsStack по умолчанию перечислены игроки, лидирующие в таблице лидеров.Оттуда вы можете нажать на игрока.Оттуда вы можете нажать на команду игрока, которая приведет вас в TeamStack.Затем вы можете снова нажать «список».Если вы вернетесь оттуда, все работает правильно.Вернуться к команде домой, вернуться к игроку, вернуться к статистике.Все еще так хорошо!

Вот в чем проблема ...

Давайте вернемся на вкладку «Статистика», затем щелкните игрока, затем перейдем в команду, затем перейдемв реестр.Теперь, если вы нажмете на нового игрока, а затем вернетесь, он вернется прямо к экрану статистики, вместо того, чтобы вернуться в реестр, затем в командный дом, затем к первоначальному игроку, а затем к статистике.

Каким-то образом, поскольку PlayerStack уже открыт, когда вы переходите к Player изнутри списка команд в опции Route 2, он возвращает вас к изначально открытому PlayerStack вместо добавления нового экрана в стек.

Имеет ли это смысл?Как сделать так, чтобы при переходе по маршруту 2 к новому игроку, когда вы возвращаетесь, он возвращал вас обратно в правильной последовательности экранов?

const MainStackNavigator = createStackNavigator(
  {
    MainTabNavigator: MainTabNavigator,

    Team: {
      screen: TeamStack,
      navigationOptions: ({ navigation }) => {
        return {
          header: null,
        }
      }
    },

    Player: {
      screen: PlayerStack,
      navigationOptions: ({ navigation }) => {
        return {
          header: null,
        }
      }
    },
)
const MainTabNavigator = createBottomTabNavigator(
    ...

    Stats: {
        screen: StatsStack,
        navigationOptions: {
          tabBarIcon: ({ focused }) => {
            return <Icon
              name="ios-stats"
              iconStyle={{}}
              color={focused ? '#000' : '#ccc'}
              size={28} />;
          },
        },
      },

    More: {
        screen: MoreStack,
        navigationOptions: {
          tabBarIcon: ({ focused }) => {
            return <Icon
              name="ios-more"
              iconStyle={{}}
              color={focused ? '#000' : '#ccc'}
              size={28} />;
          },
        },
      },
)

1 Ответ

0 голосов
/ 22 мая 2019

Я мог бы удалить этот вопрос, потому что я только что понял это после того, как записал все это, но ответ таков: на странице реестра вместо перехода к экрану проигрывателя с Navigation.navigate('Player') мне пришлось использовать Navigation.push('Player').

Согласно документам , если экран уже открыт, он не добавит в стек еще один дубликат экрана, он просто вернется к открытому экрану. Чтобы наложить экран на стек, вы должны использовать метод push.

Это будет работать в любом из моих двух случаев выше.

...