【问题标题】:How do I add public screens to react-navigation如何将公共屏幕添加到反应导航
【发布时间】:2022-01-01 05:34:11
【问题描述】:

我正在使用 Expo 和 react-navigation 构建一个 react-native 应用程序,该应用程序目前有两个导航器,一个对经过身份验证的用户可见,一个仅对未经身份验证的用户可见,例如登录页面。

这是导航结构:

function Navigation({ isLoggedIn }) {
  return (
    <NavigationContainer>
      {isLoggedIn ? (
        <Stack.Navigator>
          <Stack.Screen name="home" component={Home}></Stack.Screen>
          <Stack.Screen name="public" component={Public}></Stack.Screen>
        </Stack.Navigator>
      ) : (
        <Stack.Navigator>
          <Stack.Screen name="login" component={Login}></Stack.Screen>
          <Stack.Screen name="public" component={Public}></Stack.Screen>
        </Stack.Navigator>
      )}
    </NavigationContainer>
  );
}

如您所见,两个导航器中都有一个名为“public”的屏幕出现两次,因为我希望人们无论身份验证状态如何都能够查看此组件,这是正确的做法吗?

【问题讨论】:

    标签: reactjs react-native expo react-navigation


    【解决方案1】:

    不是基于isLoggedIn 状态启动两个单独的堆栈导航器,您可以做的是启动一个堆栈导航器,然后根据isLoggedIn 状态放置屏幕。像下面这样

          <NavigationContainer>
            <Stack.Navigator>
              
              {isLoggedIn ? (
                <Stack.Screen name="home" component={Home}></Stack.Screen>
              ) : (
                <Stack.Screen name="login" component={Login}></Stack.Screen>
              )}
              
              <Stack.Screen name="public" component={Public}></Stack.Screen>
            </Stack.Navigator>
          </NavigationContainer>
        
    

    通过这种方式,您不必将“公开”屏幕放两次,但无论用户的身份验证状态如何,用户都可以看到该屏幕。此外,您不必启动 StackNavigator 两次。

    【讨论】:

    • @R.Shen,如果答案有帮助,别忘了“接受”答案:)
    • 非常感谢!
    • @R.Shen,别担心,继续努力。如果您遇到任何问题,那么我们在这里为您服务。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-04
    • 1970-01-01
    • 1970-01-01
    • 2018-12-30
    • 2019-09-20
    • 1970-01-01
    相关资源
    最近更新 更多