[英]React native switching from stack screen navigation to drawer navigation after login
I have a few screens set with stack navigator (Login, register, forgot password, etc..) is there a way to replace those stack screens with drawer navigator after the user login and set it back to false(stack navigation) after the user logout?我有几个设置了堆栈导航器的屏幕(登录、注册、忘记密码等)。有没有办法在用户登录后用抽屉导航器替换这些堆栈屏幕,并在用户登录后将其设置回 false(堆栈导航)登出? The code below is working if I change the state manually in App.js.
如果我在 App.js 中手动更改 state,则下面的代码有效。 I was thinking to do it through global state, but I want to know if there is an easier way to do this.
我想通过全局 state 来做到这一点,但我想知道是否有更简单的方法来做到这一点。 Please note that I am beginner:) Thanks
请注意,我是初学者:) 谢谢
App.js应用程序.js
import { NavigationContainer } from "@react-navigation/native";
import AuthStack from "./app/routes/AuthStack";
import DrawerNav from "./app/routes/DrawerNav";
import { useState } from "react";
export default function App() {
const [isLoggedIn, setIsLoggedIn] = useState(false);
return (
<NavigationContainer>
{isLoggedIn ? <DrawerNav /> : <AuthStack />}
</NavigationContainer>
);
}
DrawerNav抽屉Nav
import React from "react";
import { createDrawerNavigator } from "@react-navigation/drawer";
import Home from "../screens/Home";
import Profile from "../DrawerScreens/Profile";
import Messages from "../DrawerScreens/Messages";
function DrawerNav(props) {
const Drawer = createDrawerNavigator();
return (
<Drawer.Navigator initialRouteName="Home">
<Drawer.Screen name="Home" component={Home} />
<Drawer.Screen name="Profile" component={Profile} />
<Drawer.Screen name="Messages" component={Messages} />
</Drawer.Navigator>
);
}
export default DrawerNav;
AuthStack授权栈
import React from "react";
import WelcomeScreen from "../screens/WelcomeScreen";
import Register from "../screens/Register";
import Login from "../screens/Login";
import ConfirmEmailScreen from "../screens/ConfirmEmailScreen";
import ForgotPasswordScreen from "../screens/ForgotPasswordScreen";
import NewPasswordScreen from "../screens/NewPasswordScreen";
import Home from "../screens/Home";
import { createNativeStackNavigator } from "@react-navigation/native-stack";
const Stack = createNativeStackNavigator();
const AuthStack = () => {
return (
<Stack.Navigator>
<Stack.Screen
name="Welcome"
component={WelcomeScreen}
options={{ headerShown: false }}
/>
<Stack.Screen name="Register" component={Register} />
<Stack.Screen name="Login" component={Login} />
<Stack.Screen name="Confirm Email" component={ConfirmEmailScreen} />
<Stack.Screen name="Forgot Password" component={ForgotPasswordScreen} />
<Stack.Screen name="New Password" component={NewPasswordScreen} />
<Stack.Screen
name="Home"
component={Home}
headerLeft={null}
gestureEnabled={false}
options={{ headerShown: false }}
/>
</Stack.Navigator>
);
};
If anyone have this problem I have managed to solve it by adding my DrawerNav component inside my stack screen Home component and now it's working perfectly.如果有人遇到这个问题,我已经设法通过在我的堆栈屏幕主页组件中添加我的 DrawerNav 组件来解决它,现在它运行良好。
import React from "react";
import WelcomeScreen from "../screens/WelcomeScreen";
import Register from "../screens/Register";
import Login from "../screens/Login";
import ConfirmEmailScreen from "../screens/ConfirmEmailScreen";
import ForgotPasswordScreen from "../screens/ForgotPasswordScreen";
import NewPasswordScreen from "../screens/NewPasswordScreen";
import DrawerNav from "./DrawerNav";
import { createNativeStackNavigator } from "@react-navigation/native-stack";
const Stack = createNativeStackNavigator();
const AuthStack = () => {
return (
<Stack.Navigator>
<Stack.Screen
name="Welcome"
component={WelcomeScreen}
options={{ headerShown: false }}
/>
<Stack.Screen name="Register" component={Register} />
<Stack.Screen name="Login" component={Login} />
<Stack.Screen name="Confirm Email" component={ConfirmEmailScreen} />
<Stack.Screen name="Forgot Password" component={ForgotPasswordScreen} />
<Stack.Screen name="New Password" component={NewPasswordScreen} />
<Stack.Screen
name="Home"
component={DrawerNav} // This is where I added DrawerNav
headerLeft={null}
gestureEnabled={false}
options={{ headerShown: false }}
/>
</Stack.Navigator>
);
};
export default AuthStack;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.