Управление несколькими навигаторами (stack navigator и bottomtabsnavigator) в react navigation

#react-native #react-navigation #react-navigation-stack #react-navigation-bottom-tab

#react-native #реагировать-навигация #реагировать-навигация-стек #react-navigation-нижняя вкладка #react-навигация #react-navigation-stack

Вопрос:

У меня есть приложение react native, в котором есть навигатор стека и навигатор нижних вкладок. Навигатор нижних вкладок и stack navigator имеют общие экраны между ними. Вот такая структура:

 const ExploreNavigator = createStackNavigator({
    Explore: {
        screen: ExploreScreen
    },
    Read: {
        screen: ReadScreen
    },
    CreateImage: {
        screen: CreateImageScreen
    }
})




const TabsNavigator = createBottomTabNavigator({
    ExploreTab: {
        screen: ExploreNavigator,
        navigationOptions: {
            tabBarLabel: "Explore"
        }
    },
    ReadTab: {
        screen: ReadScreen,
        navigationOptions: {
            tabBarLabel: "Read"
        }
    }
})
  

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

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

Ответ №1:

Я думаю, что для этого не нужно выделять один экран на полужирном стеке и нижней вкладке. Итак, я предлагаю следующее

 const ExploreNavigator = createStackNavigator({
    Tabs: {
        screen: TabsNavigator
    },
    CreateImage: {
        screen: CreateImageScreen
    }
})




const TabsNavigator = createBottomTabNavigator({
    Explore: {
        screen: ExploreScreen,
        navigationOptions: {
            tabBarLabel: "Explore"
        }
    },
    ReadTab: {
        screen: ReadScreen,
        navigationOptions: {
            tabBarLabel: "Read"
        }
    }
})
  

Ответ №2:

я бы сделал это так

     const ExploreNavigator = createStackNavigator({
    ExplorePrimary: {
        screen: ExploreScreen
    },
    ReadPrimary: {
        screen: ReadScreen
    },
    CreateImagePrimary: {
        screen: CreateImageScreen
    }
  })

  const ReadNavigator = createStackNavigator({
    ExplorePrimary: {
        screen: ExploreScreen
    },
    ReadSecond: {
        screen: ReadScreen
    },
    CreateImageSecond: {
        screen: CreateImageScreen
    }
  })




  const TabsNavigator = createBottomTabNavigator({
    ExploreTab: {
        screen: ExploreNavigator,
        navigationOptions: {
            tabBarLabel: "Explore"
        }
    },
    ReadTab: {
        screen: ReadNavigator,
        navigationOptions: {
            tabBarLabel: "Read"
        }
    }
  })  

Комментарии:

1. Привет, предположим, если я хочу перейти с ReadScreen на CreateImageScreen, у меня есть два разных маршрута в зависимости от того, откуда я перешел. итак, как я могу решить эту проблему?

2. если вы находитесь на ReadTab: navigation.navigate(‘CreateImageSecond’), если на explore: navigation.navigate(‘CreateImagePrimary’)

3. мой подход хорош, если вы хотите сохранить нижние вкладки на экране создания изображения

4. Привет, итак, в моем случае использования есть 2 сценария: 1. Перейдите с экрана просмотра на экран чтения, чтобы создать imagescreen. 2. Непосредственно перейдите с экрана чтения на createImageScreen. Итак, в вашем случае, как я могу узнать, откуда мне попасть в ReadScreen, а затем соответствующим образом обновить навигатор?