反应导航中的通用/共享屏幕路由?

时间:2017-12-14 11:02:59

标签: react-native react-navigation

我有这样的导航配置。

StackNavigator
     -> stack_screen1
     -> stack_screen2
     -> TabScreens

TabScreens
    -> tab_screen1
        -> StackNavigator
            -> screen x
            -> screen1 // common component
            -> screen2 // common component
    -> tab_screen2
        -> StackNavigator
            -> screen y
            -> screen1
            -> screen2
    -> tab_screen3
        -> StackNavigator
            -> screen z
            -> screen1
            -> screen2

这里screen1和screen2是可以从任何标签屏幕调用的常用组件。例如,我可以从任何选项卡屏幕显示产品显示页面。问题是如果从说tab_screen1调用screen1并切换标签tab_screen2,然后从tab_screen2访问屏幕1,则会调用tab_screen1中之前挂载的屏幕1并且选项卡也会切换到原始标签。

解决方法是为类似组件设置不同的密钥。但这是很多工作,因为我的应用程序中有许多共享组件,我正在替换导航实验到反应导航。还有其他解决方案吗?

1 个答案:

答案 0 :(得分:1)

您可以将Tab包裹到StackNavigator中,试试这个...

const TabApp = TabNavigator(
  {
    Home: {
      screen: Home,
    },
    Notifications: {
      screen: Notifications,
    },
    Profile: {
      screen: Profile,
    },
  },
)
const App = = StackNavigator(
  {
    Home: { screen: TabApp },
    ProfileOne: { screen: ProfileScreen},
    ProfileTwo: { screen: ProfileScreen2},
  }
);

这样,在所有标签之间共享ProfileScreen和ProfileScreen2

  

https://github.com/react-navigation/react-navigation/issues/586#issuecomment-310692484