【问题标题】:Manage multiple navigators (stack navigator and bottomtabsnavigator) in react navigation在反应导航中管理多个导航器(堆栈导航器和底部标签导航器)
【发布时间】:2020-10-03 08:27:13
【问题描述】:

我有一个反应原生应用程序,它有一个堆栈导航器和一个底部选项卡导航器。底部选项卡导航器和堆栈导航器之间有共同的屏幕。这是结构:

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"
        }
    }
})

现在,如果我直接从底部选项卡导航器移动到阅读屏幕并移动到堆栈导航器的 CreateImage 屏幕,当我按下返回按钮时,我会返回到默认屏幕,即探索屏幕?

那么,解决问题的最佳方法是什么?我知道我可以创建另一个堆栈导航器并添加相关屏幕。另外,如果遵循这种方法,我可以将堆栈导航器屏幕命名为相同吗?

【问题讨论】:

    标签: react-native react-navigation react-navigation-stack react-navigation-bottom-tab


    【解决方案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"
              }
          }
        })

      【讨论】:

      • 嗨,假设我想从 ReadScreen 移动到 CreateImageScreen,我有两个不同的 routeNames,具体取决于我从哪里导航。那么,我该如何解决这个问题?
      • 如果你在 ReadTab:navigation.navigate('CreateImageSecond') 如果在探索:navigation.navigate('CreateImagePrimary')
      • 如果您想在创建图像屏幕上保留底部选项卡,我的方法很好
      • 嗨,所以在我的用例中有两种情况: 1. 从探索屏幕移动到阅读屏幕到 CreateImageScreen。 2. 直接从读取画面移动到createImageScreen。那么,在你的情况下,我怎么知道我从哪里登陆 ReadScreen 然后相应地更新导航器?
      猜你喜欢
      • 2020-01-28
      • 2020-12-02
      • 1970-01-01
      • 1970-01-01
      • 2020-05-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多