Чтение названия маршрута из вложенных навигаторов - PullRequest
0 голосов
/ 17 марта 2020

Поэтому я пытаюсь скрыть навигатор нижней панели, когда пользователь переходит к стеку 2, вкладка 3.

В настоящее время я могу скрыть его, если пользователь переходит к экрану, который не часть TopTabs.

В моем текущем примере кода этот экран называется OtherScreen.

Тем не менее, когда я перехожу на вкладку 3 и пытаюсь посмотреть на currentRoute, я получаю:

currentRoute: {
    key: 'Stack2',
    routes: [
        {
            routeName: 'Stack2',
            key: 'id number of some kind',
            index: 2,
            routes: [
                {key: 'Tab1', routeName: 'Tab1'},
                {key: 'Tab2', routeName: 'Tab2'},
                {key: 'Tab3', routeName: 'Tab3'},
            ]
        }
    ]


}

Любая идея о том, как я могу узнать, могу ли я проверить, чтобы посмотрите, является ли текущий маршрут Tab 3 из Root Nav, а затем установите tabBarVisible: false?

Вот фрагмент кода

import {
  createBottomTabNavigator,
  createMaterialTopTabNavigator,
} from 'react-navigation-tabs';

// STACK 2 Tabs
const Stack2TabNavigatorConfig = {
  initialRouteName: 'Tab1',
};
const Stack2TabRouteConfig = {
  TAB1: {
    screen: Tab1Screen,
    navigationOptions: {
      tabBarLabel: 'Tab1',
    },
  },
  TAB2: {
    screen: Tab1Screen,
    navigationOptions: {
      tabBarLabel: 'Tab2',
    },
  },
  TAB3: {
    screen: Tab1Screen,
    navigationOptions: {
      tabBarLabel: 'Tab3',
    },
  },
};

const TopTabs = createMaterialTopTabNavigator(
  Stack2TabNavigatorConfig,
  Stack2TabRouteConfig,
);

// STACK 2
const Stack2NavigatorConfig = {
  initialRouteName: 'Stack2',
  headerLayoutPreset: 'center',
};

const Stack2RouteConfigs = {
  Stack2: {
    screen: TopTabs,
  },
  OtherScreen: {
    screen: 'OtherScreen',
  },
};

const Stack2 = createStackNavigator(Stack2NavigatorConfig, Stack2RouteConfigs);

// APP STACK

const TabNavigatorConfig = {
  initialRouteName: 'Stack1',
};

const RouteConfigs = {
  Stack1: {
    screen: Stack1,
    navigationOptions: {
      tabBarLabel: 'Stack 1',
    },
  },
  Stack2: {
    screen: Stack2,
    navigationOptions: ({ navigation }) => {
      const currentRoute = navigation.state.routes[navigation.state.index];
      let routeName;
      let tabBarVisible = true;
      if (
        currentRoute &&
        currentRoute.routes &&
        currentRoute.routes[1] &&
        currentRoute.routes[1].routeName
      ) {
        routeName = currentRoute.routes[1].routeName;
      }
      if (routeName === 'OtherScreen') {
        tabBarVisible = false;
      }
      return {
        tabBarLabel: 'Stack 2',
        tabBarVisible,
      };
    },
  },
};

const AppNavigator = createBottomTabNavigator(RouteConfigs, TabNavigatorConfig);

export default AppNavigator;

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...