createBottomTabNavigator сохраняет стеки подключенными - PullRequest
0 голосов
/ 08 мая 2019

У меня есть SwitchNavigator верхнего уровня с двумя стеками (AuthStack и MainStack) MainStack содержит стек зарегистрированного пользователя. Когда я пытаюсь переключиться с одного экрана на другой, это нормально, но если я запускаю действие, которое изменяет состояние текущего экрана, если я ухожу, а затем возвращаюсь, состояние остается прежним, как будто экраны не были отключены, когда я переключаться между другими.

Рабочий пример: https://snack.expo.io/HJrslFk34

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

const MainStack = createBottomTabNavigator(
        {
            [homeDrawerLabel]: {
                screen: HomeNavigator,
                navigationOptions: {
                    tabBarLabel: homeDrawerLabel,
                    tabBarIcon: ({ tintColor }) => (
                        <Ionicons
                            name="ios-bookmarks"
                            size={25}
                            color={tintColor}
                        />
                    ),
                },
            },
            [calendarDrawerLabel]: {
                screen: CalendarNavigator,
                navigationOptions: {
                    tabBarLabel: calendarDrawerLabel,
                    tabBarIcon: ({ tintColor }) => (
                        <Ionicons
                            name="ios-bookmarks"
                            size={25}
                            color={tintColor}
                        />
                    ),
                    headerLayoutPreset: "center",
                },
            },
            [messagesDrawerLabel]: {
                screen: MessagesNavigator,
                navigationOptions: {
                    tabBarLabel: messagesDrawerLabel,
                    tabBarIcon: ({ tintColor }) => (
                        <Ionicons
                            name="ios-bookmarks"
                            size={25}
                            color={tintColor}
                        />
                    ),
                },
            },
            [notificationsDrawerLabel]: {
                screen: NotificationsNavigator,
                navigationOptions: {
                    tabBarLabel: notificationsDrawerLabel,
                    tabBarIcon: ({ tintColor }) => (
                        <IconNavigatorWithBadge
                            badgeCount={3}
                            name="md-checkmark-circle"
                            size={25}
                            color={tintColor}
                        />
                    ),
                },
            },
            EditProfile: { screen: EditProfile },
            [paymentDrawerLabel]: {
                screen: PaymentsNavigator,
                navigationOptions: {
                    tabBarLabel: paymentDrawerLabel,
                    tabBarIcon: ({ tintColor }) => (
                        <Ionicons
                            name="ios-bookmarks"
                            size={25}
                            color={tintColor}
                        />
                    ),
                },
            },
        },
        {
            tabBarOptions: {
                activeTintColor: "#29C2AF",
                inactiveTintColor: "rgba(41, 194, 175, 0.4)",
                style: {
                    height: 60,
                    paddingVertical: 10,
                    borderTopColor: "rgba(0,0,0,0.2)",
                    shadowColor: "#000",
                    shadowOffset: {
                        width: 2,
                        height: 5,
                    },
                    shadowOpacity: 0.75,
                    shadowRadius: 3.84,
                    elevation: 7,
                },
            },
            headerMode: "none",
            headerLayoutPreset: "center",
        },
    );

    const AppNavigator = createSwitchNavigator(
        {
            AuthStack: AuthStack,
            Main: MainStack,
        },
        {
            headerMode: "none",
            initialRouteName: "AuthStack",
        }
    );

    const AppContainer = createAppContainer(AppNavigator);

1 Ответ

2 голосов
/ 08 мая 2019

С помощью React Navigation представления Navigator не отключаются при переключении между вкладками. Вы можете увидеть подробности о жизненном цикле в реакции-навигации в их документации здесь: Жизненный цикл навигации - Пример сценария , важная часть которого находится здесь:

Мы начинаем с HomeScreen и переходим к DetailsScreen. Затем мы используем панель вкладок, чтобы переключиться на экран настроек и перейти к профилю экрана. После выполнения этой последовательности операций монтируются все 4 экрана !

Если вы хотите знать и действовать на активной вкладке, вам понадобятся события фокусировки / размытия, обозначенные здесь

...