// AppContainer.js
const AuthNavigator = createStackNavigator(...code);
const DrawerNavigator = createDrawerNavigator(
{
MyAccount: MyAccountScreen,
Home: HomeScreen,
}
);
const AppNavigator = createStackNavigator(
{
Home: HomeScreen,
MyAccount: MyAccountScreen,
}
);
const AppContainer = createAppContainer(
createSwitchNavigator(
{
AuthNavigator,
AppNavigator,
DrawerNavigator,
},
{
initialRouteName: AuthNavigator,
}
)
);
//我打电话给HomeScreen.js:
onPress={() =>
this.props.navigation.dispatch(DrawerActions.openDrawer())
}
它将打开模式,但始终自动进入MyAccountScreen,而无需触摸任何内容。预期的行为只是打开模态。
答案 0 :(得分:1)
是的,这实际上是正确的。但是,您在理解DrawerNavigator
的工作方式时会遇到一些麻烦。如果您不在抽屉上,则无法打开抽屉。
我看到您在2个导航器中定义了HomeScreen
。而且我觉得您希望能够使用Home
从MyAccount
到DrawerNavigator
导航,这意味着这两个路线都必须在{{1}之内},并且您希望HomeScreen成为默认情况下第一个可见的屏幕。
DrawerNavigator
您已经拥有哪种。您的误解是,对于当前的路线,您不需要const DrawerNavigator = createDrawerNavigator(
{
Home: HomeScreen,
MyAccount: MyAccountScreen,
}
);
,只需将上面的名称重命名为AppNavigator
,并且导航配置应如下所示:
AppNavigator
就是这样。现在,当您导航到const AppNavigator = createDrawerNavigator(
{
Home: HomeScreen,
MyAccount: MyAccountScreen,
}
);
const AppContainer = createAppContainer(
createSwitchNavigator(
{
AuthNavigator,
AppNavigator,
DrawerNavigator,
},
{
initialRouteName: AuthNavigator,
}
)
);
时,第一个显示的路线将是AppNavigator
,打开抽屉将仅显示抽屉,而不会自动将您导航到Home
。