向内导航返回从一个堆栈到另一个堆栈的反应导航

时间:2019-05-21 21:22:10

标签: react-navigation react-navigation-stack

有两种方法可以进入播放器屏幕。

  1. 您单击“更多”选项卡,其中有“团队”链接,其中显示了所有可用的团队。然后单击一个团队,它将带您进入TeamStack。

在TeamStack中,默认设置是“团队主屏幕”,然后是一堆其他屏幕,其中一个是“名册”,其中列出了该团队的所有球员。从那里您可以进入PlayerStack,将您带到播放器主屏幕。

现在,当您进入播放器屏幕时,您可以滑动以返回,这会将您从原先的位置带回去……名册,然后是主队,再到“更多”页面。

到目前为止一切顺利!

  1. 您单击“ Stats”选项卡,该选项卡链接到StatsStack。默认的StatsStack屏幕列出了领先排行榜的玩家。从那里您可以单击播放器。从那里您可以单击玩家的团队,将您带到TeamStack。然后,您可以再次单击“名册”。如果您从那里返回,一切正常。回到球队主场,回到球员,再回到统计数据。到目前为止,还算不错!

这是问题所在...

让我们回到“统计”选项卡,然后单击一个球员,然后进入一个团队,然后进入花名册。现在,如果您单击一个新球员,然后返回,它会直接返回到“统计信息”屏幕,而不是返回到名册,团队主屏幕,原始球员和统计信息。

以某种方式,因为PlayerStack已经打开,所以当您在“路线2”选项中从“团队花名册”中转到“玩家”时,它将带您回到最初打开的PlayerStack,而不是在堆栈中添加新屏幕。

>

这有意义吗?我该怎么做,以便当您沿Route 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 :(得分:0)

我可以删除此问题,因为我在写完所有内容后才想出了答案,但是答案是在名册页面上,而不是使用Navigation.navigate('Player')进入播放器屏幕,我不得不使用{{1 }}。

According to the docs,如果该屏幕已经打开,则不会将另一个重复的屏幕添加到堆栈中,它只会返回到打开的屏幕。为了将屏幕强制移到堆栈上,您必须使用push方法。

这将在以上两种情况下都有效。