【问题标题】:Is there a way to navigate between screens that is not defined in the NavigationContainer in ReactNavigation?有没有办法在 ReactNavigation 的 NavigationContainer 中未定义的屏幕之间导航?
【发布时间】:2021-02-17 19:33:51
【问题描述】:

我正在尝试导航到我的登录屏幕,但我没有在我的 NavigationContainer 中定义我的登录屏幕。这是因为我不希望登录屏幕成为导航栏中的选项卡。这引出了我的问题:有没有办法导航到登录屏幕,而不是将其作为导航栏中的选项卡?

export default function App() {
  return (
    <NavigationContainer>
      <SafeAreaView style={{flex: 1}}>
      <Tab.Navigator
        screenOptions={({ route }) => ({
          tabBarIcon: ({ focused, color, size }) => {
            let iconName;

            if (route.name === 'Home') {
              iconName = focused
                ? 'home-outline'
                : 'home-outline';
            } else if (route.name === 'Profile') {
              iconName = focused ? 'person-circle-outline' : 'person-circle-outline';
            } else if (route.name === 'Calendar') {
              iconName = focused ? 'calendar-clear' : 'calendar-clear';
            } else if (route.name === 'Agenda') {
              iconName = focused ? 'calendar-outline' : 'calendar-outline';
            }

            return <Ionicons name={iconName} size={size} color={color} />;
          },
        })}
        tabBarOptions={{
          activeTintColor: 'blue',
          inactiveTintColor: 'gray',
        }}
      >
        <Tab.Screen name="Home" component={HomeScreen} />
        <Tab.Screen name="Profile" component={ProfileScreen} />
        <Tab.Screen name="Calendar" component={CalendarScreen} />
        <Tab.Screen name="Agenda" component={AgendaScreen} />
        <Tab.Screen name="New Event" component={NewEventScreen} />
      </Tab.Navigator>
      </SafeAreaView>
    </NavigationContainer>
  );
}
<Button 
   title="Do you have an account? Click here to log in"
   onPress={() => this.props.navigation.navigate("Login")}
/>

【问题讨论】:

    标签: javascript reactjs react-native react-navigation


    【解决方案1】:

    这是如何完成的示例:

    private render() {
        const Stack = createStackNavigator();
        const landingScreen = this.props.isLoggedIn ? null : (
            <Stack.Screen
                name="LoginScreen"
                component={LoginScreen}
            />
        );
        
        return (
            <NavigationContainer>
                <Stack.Navigator>
                    {landingScreen}
                    <Stack.Screen name="HomeScreen" component={this.renderTabNavigator}/>
                </Stack.Navigator>
            </NavigationContainer>
        );
    }
    
    private renderTabNavigator = () => {
        const Tab = createBottomTabNavigator();
        return (
            <Tab.Navigator>
                <Tab.Screen name="Home" component={SearchScreen}/>
                <Tab.Screen name="Favorites" component={FavoritesScreen}/>
                <Tab.Screen name="Settings" component={SettingsScreen}/>
            </Tab.Navigator>
        );
    }
    

    【讨论】:

    • @romin21 这个工作......但它有 导航器的不必要嵌套 这是不推荐的......更好的方法是在堆栈导航之间切换 - 使用 LoginScreen 和TabNavigator(主流)
    • @HendEl-Sahli 我的回答基于react-native-navigation 在其文档中的示例:reactnavigation.org/docs/auth-flow
    • 这正是我所做的@HendEl-Sahli。请仔细阅读我的回答。
    • 基于文档我们建议将嵌套导航器减少到最少。尝试通过尽可能少的嵌套来实现您想要的行为。 ...因此,TabNavigator 将不必要地存在于StackNavigator ... 更多信息在这里reactnavigation.org/docs/nesting-navigators/…
    • 您好,请您看看我的问题,非常感谢。 stackoverflow.com/questions/66223083/… 抱歉,如果标题不是描述性的。基本上,当用户最初登录或注册时,他的令牌被存储。我的问题是,当我刷新我的应用程序而不是呈现我的选项卡导航器时,我想呈现一个密码屏幕,然后如果密码正确,我会呈现我的选项卡导航器。但我不能这样做,因为令牌已经存在,因此我无法再次登录。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-09
    • 1970-01-01
    • 1970-01-01
    • 2021-10-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多