【问题标题】:Navigating to a screen in a nested navigator, and going back在嵌套导航器中导航到屏幕,然后返回
【发布时间】:2021-05-26 01:14:56
【问题描述】:

假设我有 2 个 StackNavigator 并排嵌套在 BottomTabNavigator 中,如下所示:

  const StackA = () => (
    <StackANavigator.Navigator>
      <StackANavigator.Screen
        component={ScreenA1}
        name={'screenA1'}
      />

      <StackANavigator.Screen
        component={ScreenA2}
        name={'screenA2'}
      />
    </StackANavigator.Navigator>
  );

  const StackB = () => (
    <StackBNavigator.Navigator>
      <StackBNavigator.Screen
        component={ScreenB1}
        name={'screenB1'}
      />

      <StackBNavigator.Screen
        component={ScreenB2}
        name={'screenB2'}
      />
    </StackBNavigator.Navigator>
  );

  const App = () => (
    <BottomTabNavigator.Navigator>
      <BottomTabNavigator.Screen
        component={StackA}
        name={'stackA'}
      />

      <BottomTabNavigator.Screen
        component={StackB}
        name={'stackB'}
      />
    </BottomTabNavigator.Navigator>
  );

假设应用在“screenA1”上启动。我可以通过navigate('stackB')navigate('stackA') 在堆栈之间导航,例如,我可以使用navigate('stackB', { screen: 'screenB2' }) 从“screenA1”导航到“screenB2”。但是,这样做会弄乱 B 堆栈。如果我从那里调用goBack 去'screenA1',然后navigate('stackB'),我会被带到'screenB2',而不是那个堆栈的初始路径,即'screenB1'。

是否可以在不复制 A 堆栈中的“screenB2”的情况下避免这种行为?

编辑:用于说明 A1 -> A2 -> B2 -> A2 -> A1。现在如果我尝试去 B1,我会去 B2

【问题讨论】:

  • 你尝试定义 initialRouteName 了吗?
  • 我没有,但我刚才试了一下,行为没有变化

标签: react-native react-navigation react-navigation-v5


【解决方案1】:

标签导航器背后的假设逻辑是每个标签都是独立的,因此在不同的标签中调用屏幕是非常罕见的。

因此,您应该在每个选项卡中引用每个所需的屏幕。为防止导航路线出错,您可以根据选项卡对其进行命名。

如果您想在单个选项卡内的当前导航之上有一个单独的导航,您可以另外添加一个模式。

【讨论】:

  • 所以基本上,ScreenB2 也应该在StackA 内部,但是使用不同的屏幕名称?干杯
  • 是的,name 是您的 navigate() 选择器,因此为确保您知道打开的内容,请单独选择
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-22
  • 2019-12-02
相关资源
最近更新 更多