我使用React Navigation在移动应用程序中进行导航,并且具有如下结构导航:

const AccountStack = createStackNavigator(
    {
        Account: AccountView,
        ...

    },
    {
        initialRouteName: 'Account',
        headerMode: 'screen',
        ....
    }
)

const SearchUsersStack = createStackNavigator(
    {
        SearchUsers: SearchUsersView,
        UserProfile: UserProfileView,
        FriendsOfUser: FriendsOfUserView
    },
    {
        ...
    }
)

const AccountModalStack = createStackNavigator(
    {
        AccountStack: AccountStack,
        SearchUsersStack: SearchUsersStack,
    },
    {
        initialRouteName: 'AccountStack',
        headerMode: 'none',
        mode: 'modal',

    }
)

const MainApp = createBottomTabNavigator(
    {
        MainHome: HomeStack,
        MainPlay: PlayStack,
        MainAccount: AccountModalStack
    },
    {
        ...
    }
)


如果我在“搜索用户”堆栈中(例如,在SearchUserView中),然后单击底部选项卡导航器中的“帐户”图标,则该堆栈将正确关闭,并且我将返回到“帐户”视图。

但是,如果我处于AccountStack的其中一条路由中,并且单击底部选项卡导航器中的“ Account”图标,则堆栈不会关闭。因此,如果我在帐户堆栈中距离很远,则必须返回后退箭头。

为什么当我在SearchUserStack中而不在AccountStack中时有效?

希望能找到帮助!

谢谢 !

维克多

最佳答案

您可以覆盖单击选项卡时发生的情况,可以通过选项卡栏中每个导航器的navigationOptions进行操作。

const AccountModalStack = createStackNavigator(
  {
    AccountStack: AccountStack,
    SearchUsersStack: SearchUsersStack,
    // ...
  },
  {
    initialRouteName: 'AccountStack',
    navigationOptions: {
      tabBarOnPress: ({ navigation }) => {
        navigation.navigate({
          routeName: 'AccountStack', // navigates to the initial route
          action: navigation.popToTop(), // go to the top of the stack of that route
        })
      },
      // ...
    },
    // ...
  }
)


默认情况下,选项卡可能会尝试简单地导航到初始路由,而不重置堆栈。

08-04 06:07