无法通过反应导航导航到另一个堆栈

时间:2020-03-21 20:19:21

标签: react-native react-navigation react-navigation-v5

当用户使用navigation.navigate('Auth')退出时,我试图从一个屏幕导航(在下面的示例中,从“设置”屏幕转到“身份验证”),但出现错误:“您是否有一个名为“验证”?

我不明白这里出了什么问题。在反应导航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>
  );
};

1 个答案:

答案 0 :(得分:1)

PS:请随意忽略令牌部分。

那是重要的部分。当令牌存在时,您将定义Main屏幕,而在令牌不存在时,您将定义Auth。如果存在令牌,则只有一个名为Main的屏幕,没有定义的Auth屏幕。因此,您无法导航到它。同样,当不存在令牌时,只有Auth屏幕,因此您无法导航到Main

当用户使用navigation.navigate('Auth')退出时

用户注销后,您不应手动将navigate切换到Auth。相反,您应该只删除令牌(setToken(null))。然后,由于您在令牌为Auth时定义了它,因此React Navigation将自动显示null屏幕。

https://reactnavigation.org/docs/auth-flow

中的更多详细信息