无法使用SwitchNavigator在本机中创建全局导航

时间:2019-05-30 20:18:22

标签: typescript react-native react-navigation expo

我有一个相当复杂的多层导航结构,我试图在屏幕/儿童之间切换。我希望每当api调用返回用户会话信息不再有效或在完成付款后将其返回到主屏幕时,就可以将用户退回登录屏幕。

我有一个静态类,我尝试在其中设置导航,然后调用Navigation on,但问题是它不适用于导航到子级。

这是我的导航结构:

  appNavigation: SwitchNavigator{
    LoginFlow: BottomTabNavigator{
      CallUs: Screen,
      Login: Screen,
      LocationsInsecure: StackNavigator{
        // Location Screens
      }
      MoreInfoInsecure: Screen
    }
    MainFlow: BottomTabNavigator{
      Home: Screen,
      Order: StackNavigator{
        // Order Screens
      },
      Payment: StackNavigator{
        // Payment Screens
      },
      Messages: Screen,
      MoreInfo: Screen,
      Locations: StackNavigator{
        // Location Screens
      }
    }
  }

我使用以下方法进行设置:

// App.ts
/*
* More code above configuring LoginFlow and MainFlow as outlined
*/
export default createSwitchNavigator(
  {
    'LoginFlow': props => {
      Context.SetNavigation(props.navigation)
      return <LoginFlow />
    },
    'MainFlow': MainFlow
  },
  { initialRouteName: 'LoginFlow' }
)

我希望能够致电Context.GetNavigation().navigate('Home'),该电话不起作用。

我也尝试过:

Context.GetNavigation().dispatch(
  NavigationActions.navigate({
    routeName: 'MainFlow',
    action: NavigationActions.navigate({
      routeName: 'Home'
    })
  })
)

值得注意的几件事:

  • 我可以在用户无法正常使用的TabNavigator上调用Context.GetNavigation().navigate()
  • 我可以从家庭内部致电this.props.navigation.navigate('PaymentSubscreen')
  • 我可以从“付款堆栈”中致电this.props.navigation.navigate('Home')

在SwitchNavigator上的屏幕之间似乎存在严格的障碍。这是预期的行为吗?相反,我是否应该仅单独存储LoginFlow导航并仅针对过期的会话调用它,并使用屏幕属性导航器来控制MainFlow中的移动?

0 个答案:

没有答案