-1

当用户使用注销navigation.navigate('Auth')但我收到错误消息时,我正在尝试从屏幕(以下示例中的“设置”屏幕导航到“身份验证”):“您有名为“身份验证”的屏幕吗?”

我不明白这里有什么问题。在 react-navigation 4 中,这是可能的。

PS:随意忽略token部分。

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>
  );
};
4

1 回答 1

1

PS:随意忽略token部分。

这是重要的部分。您正在定义Main令牌存在时的屏幕,以及Auth令牌不存在时的屏幕。如果存在令牌,则您有一个名为Main的屏幕,没有Auth定义屏幕。所以你不能导航到它。同样,当令牌不存在时,只有Auth屏幕,因此您无法导航到Main.

当用户使用注销时navigation.navigate('Auth')

当用户注销时,您不应手动navigateAuth. 相反,您应该只删除令牌 ( setToken(null))。然后 React Navigation 将自动显示Auth屏幕,因为您在 token 为 时定义了它null

https://reactnavigation.org/docs/auth-flow中的更多详细信息

于 2020-03-22T00:49:52.503 回答