React native 无法使用react navigation导航到另一个堆栈

React native 无法使用react navigation导航到另一个堆栈,react-native,react-navigation,react-navigation-v5,React Native,React Navigation,React Navigation V5,在下面的示例中,当用户使用导航注销时,我试图从“设置”屏幕导航到“身份验证”。导航到“身份验证”,但我收到一个错误:您有名为“身份验证”的屏幕吗 我不明白这里怎么了。在react导航4中,这是可能的 PS:可以忽略令牌部分 import React, { useState, useEffect } from 'react'; import { Text, View } from 'react-native'; import AsyncStorage from '@react-native-co

在下面的示例中,当用户使用导航注销时,我试图从“设置”屏幕导航到“身份验证”。导航到“身份验证”,但我收到一个错误:您有名为“身份验证”的屏幕吗

我不明白这里怎么了。在react导航4中,这是可能的

PS:可以忽略令牌部分

import React, { useState, useEffect } from 'react';
import { Text, View } from 'react-native';

import AsyncStorage from '@react-native-community/async-storage';

import { NavigationContainer } from '@react-navigation/native';

import { createStackNavigator } from '@react-navigation/stack';

import Login from './src/screens/Login'
import Register from './src/screens/Register'
import Welcome from './src/screens/Welcome'
import Map from './src/screens/Map'
import Shop from './src/screens/Shop'
import OfferConfirmation from './src/screens/OfferConfirmation'
import Settings from './src/screens/Settings'



const AuthStack = createStackNavigator()
const AuthStackScreen = () => (
  <AuthStack.Navigator>
    <AuthStack.Screen name="Login" component={Login} />
    <AuthStack.Screen name="Register" component={Register} />
  </AuthStack.Navigator>
)

const MainStack = createStackNavigator()
const MainStackScreen = () => (
  <MainStack.Navigator>
    <MainStack.Screen
      name="Map" component={Map}
    />
    <MainStack.Screen name="Shop" component={Shop} />
    <MainStack.Screen name="OfferConfirmation" component={OfferConfirmation} />
    <MainStack.Screen name="Settings" component={Settings} />
  </MainStack.Navigator>
)

const Stack = createStackNavigator();

export default () => {

  const [token, setToken] = useState(null)

  return (
   <NavigationContainer>
    <Stack.Navigator>

      {token ?
        <Stack.Screen name="Main" component={MainStackScreen} />
      :
        <Stack.Screen name="Auth" component={AuthStackScreen} />
      }

    </Stack.Navigator>
   </NavigationContainer>
  );
};
PS:可以忽略令牌部分

import React, { useState, useEffect } from 'react';
import { Text, View } from 'react-native';

import AsyncStorage from '@react-native-community/async-storage';

import { NavigationContainer } from '@react-navigation/native';

import { createStackNavigator } from '@react-navigation/stack';

import Login from './src/screens/Login'
import Register from './src/screens/Register'
import Welcome from './src/screens/Welcome'
import Map from './src/screens/Map'
import Shop from './src/screens/Shop'
import OfferConfirmation from './src/screens/OfferConfirmation'
import Settings from './src/screens/Settings'



const AuthStack = createStackNavigator()
const AuthStackScreen = () => (
  <AuthStack.Navigator>
    <AuthStack.Screen name="Login" component={Login} />
    <AuthStack.Screen name="Register" component={Register} />
  </AuthStack.Navigator>
)

const MainStack = createStackNavigator()
const MainStackScreen = () => (
  <MainStack.Navigator>
    <MainStack.Screen
      name="Map" component={Map}
    />
    <MainStack.Screen name="Shop" component={Shop} />
    <MainStack.Screen name="OfferConfirmation" component={OfferConfirmation} />
    <MainStack.Screen name="Settings" component={Settings} />
  </MainStack.Navigator>
)

const Stack = createStackNavigator();

export default () => {

  const [token, setToken] = useState(null)

  return (
   <NavigationContainer>
    <Stack.Navigator>

      {token ?
        <Stack.Screen name="Main" component={MainStackScreen} />
      :
        <Stack.Screen name="Auth" component={AuthStackScreen} />
      }

    </Stack.Navigator>
   </NavigationContainer>
  );
};
这是最重要的部分。当令牌存在时定义主屏幕,当令牌不存在时定义身份验证。若存在令牌,则有一个名为Main的屏幕,并没有定义身份验证屏幕。因此,您无法导航到它。类似地,当令牌不存在时,只有Auth屏幕,所以您无法导航到Main

当用户使用导航注销时。导航“Auth”

用户注销时,不应手动导航到Auth。相反,您应该只删除标记setTokennull。然后,React Navigation将自动显示Auth屏幕,因为您在令牌为null时定义了它


更多详情请参见

我有点犹豫是否要根据上下文来完成所有这些工作,但还行。所以你说如果令牌部分不在那里,通常导航到Auth会起作用吗?我无法使上下文正常工作。网站上的例子显然是不完整的。我不知道你为什么一直在那里贴不完整的例子。我非常感谢你,就我个人而言,已经多次回答了我的问题。但同时,我真的相信,你们在世博会导航教程中并没有做到最好。