【问题标题】:Building React Navigation v5 stack with Stack Navigation and Tab Navigation使用 Stack Navigation 和 Tab Navigation 构建 React Navigation v5 堆栈
【发布时间】:2021-02-23 08:51:45
【问题描述】:

我目前正在尝试了解如何使用 v5 构建我的 React Navigation 堆栈,而不是使用 switchNavigator。

我的基本应用结构是这样的(将在下面发布一个流程的图像):

check Auth    
    -> signed in yes
      -> tab navigation (with stack navigators nested within)    
    -> signed in no
      -> nested stack navigator

但我就是不知道应该如何构建应用程序的根目录。我不知道如何将我的选项卡导航器和堆栈导航器组合在一起以使我的应用程序从头到尾发挥作用。

(值得注意的是,'check Auth'是一个实际的屏幕,而不是一个条件)

这是我的插图,展示了我的项目布局:

有人可以建议我如何构建它吗?任何关于如何最好地做到这一点的提示或一般结构/建议将不胜感激!

【问题讨论】:

  • “检查身份验证”屏幕的唯一目的是确定您的用户当前是否已登录?
  • 我还计划将该屏幕用于 Face ID / Touch ID,并在我的 Context 中进行 API 调用,以便在访问仪表板之前获取必要的用户数据。

标签: react-native react-navigation


【解决方案1】:

所以我过去通常做的是渲染,或者不是两者都渲染。例如,根导航可能如下所示:

import { NavigationContainer as RootNavigationContainer } from "@react-navigation/native";


const Navigation = () => {
  const { someToken } = useContext(SomeContext);

  return (
    <RootNavigationContainer>
      {!someToken ? <AuthStack /> : <MainStack />}
    </RootNavigationContainer>
  );
};

应在显示初始屏幕时确定用户的身份验证状态,使用单独的组件只会混淆 IMO 流程。如果用户通过了身份验证,您可以设置一些状态(在示例中,在上下文中设置了一个令牌),该状态将驱动显示哪个导航堆栈。

在我的示例中,AuthStack 将包含您的用户未经身份验证的所有屏幕 - 因此您的登录、注册等。MainStack 将包含应该只显示给经过身份验证的用户的屏幕。

FaceID 之类的东西应该包含在您的登录流程中。

【讨论】:

  • 感谢您的回复。我想我做得更好了——但你所说的“启动画面”是什么意思?
  • 因此,您可以在用户看到任何有意义的信息之前收集数据时显示一个启动屏幕(您必须自己创建)作为用户的缓冲区,或者使用(假设您是使用博览会)类似 AppLoading:docs.expo.io/versions/latest/sdk/app-loading
猜你喜欢
  • 2021-01-24
  • 1970-01-01
  • 2021-11-02
  • 2021-10-09
  • 2020-12-11
  • 2019-06-19
  • 1970-01-01
  • 2020-05-24
  • 1970-01-01
相关资源
最近更新 更多