React native 从一个导航器中的屏幕导航到另一个导航器中的屏幕
我使用的是react导航v5 在我的应用程序中。我有两个导航器,一个堆栈导航器一个抽屉导航器:React native 从一个导航器中的屏幕导航到另一个导航器中的屏幕,react-native,react-navigation,react-navigation-v5,React Native,React Navigation,React Navigation V5,我使用的是react导航v5 在我的应用程序中。我有两个导航器,一个堆栈导航器一个抽屉导航器: const LoginStack = createStackNavigator(); const Drawer = createDrawerNavigator(); 我根据登录状态显示其中一个: {state.loggedIn? ( <LoginStack.Navigator ...> <LoginStack.Screen
const LoginStack = createStackNavigator();
const Drawer = createDrawerNavigator();
我根据登录状态显示其中一个:
{state.loggedIn? (
<LoginStack.Navigator
...>
<LoginStack.Screen
name='login'
component={LoginScreen}
/>
<LoginStack.Screen
name='register'
component={RegisterScreen}
/>
</LoginStack.Navigator>
) : (
<>
<Drawer.Navigator
initialRouteName={Landing}
drawerContent={props => <MyDrawerContent {...props} />}
>
<Drawer.Screen name="landing" component={LandingScreen} />
...
</Drawer.Navigator>
</>
)}
{state.loggedIn(
) : (
}
>
...
)}
如上所述,如果用户未登录,我将显示LoginStack
navigator,否则我将显示Drawer
navigator。如果您仔细查看Drawer.Navigator
部分,我已经声明了我自己的抽屉内容MyDrawerContent
在MyDrawerContent
中,我有一个注销按钮。我想将用户导航到LoginStack
的LoginScreen
。我试过:
props.navigation.navigate('login')}/>
但是我得到错误:
任何导航器都没有处理带有有效负载{“name”:“Login”}的操作“导航”。
。是因为我正在导航到另一个导航器的屏幕,而该导航器不属于MyDrawerContent
?如何解决此问题?由于您创建了两个完全独立的导航树,因此无法在它们之间导航,因为当您在抽屉中时,登录
屏幕未注册,因此不可用
但是,您真正想做的是在按下注销按钮时,将loggedIn
状态更改为false。这将重新呈现主应用程序组件,并呈现LoginStack
。现在还不清楚如何在组件树中传递状态
,因此我无法提供具体的代码示例,但希望您能理解。我已经创建了一个全局上下文来承载登录状态。来自该上下文的提供者包装了整个应用程序。在这种情况下,从上下文获取状态并更新loggedIn
属性。