在我App.tsx
的设置中,我是这样设置的:
export default function App() {
const [user, setUser] = useState<any>(null);
return (
<Provider store={store}>
<NavigationContainer>
<AuthContext.Provider value={{user, setUser}}>
<SafeAreaView style={{flex: 1}}>
<Navigation />
</SafeAreaView>
</AuthContext.Provider>
</NavigationContainer>
</Provider>
);
}
我的导航组件包含根据用户呈现经过身份验证或未经身份验证的路由的逻辑,它包含以下内容:
const Navigation = () => {
const { user } = useContext(AuthContext);
return (
<Stack.Navigator>
{user ? (
<Stack.Group>
<Stack.Screen
name="Main"
component={Auth}
options={{
headerShown: false,
}}
/>
<Stack.Screen
name="Users"
component={Users}
options={{headerShown:false}}
/>
</Stack.Group>
) : (
<Stack.Screen
name="NonAuth"
component={NonAuth}
options={{ headerShown: false }}
/>
)}
</Stack.Navigator>
);
};
export default Navigation;
该Auth
组件有一段BottomTabNavigator
时间NonAuth
是另一个StackNavigator
在 BottomTabNavigator 的屏幕内我有一个设置屏幕,其中有注销按钮,当我单击此按钮时,我将用户设置为 null,但我收到错误消息:null is不是评估 user.role 的对象在 BottomTabNavigator 我正在检查 user.role 以确定要显示的底部选项卡,但是由于用户为 null 为什么它进入 Auth 路由,当我正确登录时,它会自动从 NonAuth 到 Auth因为在登录时我将用户设置为一些数据,但在注销时我将其设置为 null 并且它仍然在 Auth 内部?
这些是我正在使用的版本:
"@react-navigation/bottom-tabs": "^6.0.9",
"@react-navigation/native": "^6.0.6",
"@react-navigation/native-stack": "^6.2.5",
"@react-navigation/stack": "^6.0.11",
另请注意,NonAuth 是使用@react-navigation/native-stack
Navigation创建的@react-navigation/stack