React native 无法使用react navigation导航到另一个堆栈
在下面的示例中,当用户使用导航注销时,我试图从“设置”屏幕导航到“身份验证”。导航到“身份验证”,但我收到一个错误:您有名为“身份验证”的屏幕吗 我不明白这里怎么了。在react导航4中,这是可能的 PS:可以忽略令牌部分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
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会起作用吗?我无法使上下文正常工作。网站上的例子显然是不完整的。我不知道你为什么一直在那里贴不完整的例子。我非常感谢你,就我个人而言,已经多次回答了我的问题。但同时,我真的相信,你们在世博会导航教程中并没有做到最好。