如何将 public 屏幕添加到 react-navigation
How do I add public screens to react-navigation
我正在使用 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' 的屏幕在两个导航器中都出现了两次,因为我希望人们无论其身份验证状态如何都能够查看此组件,这是正确的做法?
您可以启动一个 Stack Navigator,然后根据 isLoggedIn
状态放置屏幕,而不是根据 isLoggedIn
状态启动两个单独的 Stack Navigator。喜欢下面
<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>
通过这种方式,您不必将 'public' 屏幕放置两次,但用户无论其身份验证状态如何都可以看到该屏幕。此外,您不必启动 StackNavigator 两次。
我正在使用 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' 的屏幕在两个导航器中都出现了两次,因为我希望人们无论其身份验证状态如何都能够查看此组件,这是正确的做法?
您可以启动一个 Stack Navigator,然后根据 isLoggedIn
状态放置屏幕,而不是根据 isLoggedIn
状态启动两个单独的 Stack Navigator。喜欢下面
<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>
通过这种方式,您不必将 'public' 屏幕放置两次,但用户无论其身份验证状态如何都可以看到该屏幕。此外,您不必启动 StackNavigator 两次。