反应导航 - 如何在 stackNavigator 中嵌套 drawerNavigator

JAM*_*JAM 5 drawer reactjs react-native react-navigation

我正在使用 react-navigation,我想从MyProfile屏幕打开一个抽屉,可以选择转到EditProfile屏幕和设置屏幕。但是当我点击MyProfile 的标题按钮时,我不知道如何打开抽屉。

应用程序.js:

const MyProfileStack = createStackNavigator({
  MyProfile: {
    screen: profile,
    navigationOptions: ({navigation}) => {
      return {
        title: "My Profile",
        headerRight: (
          <Icon type="evilicon" name="navicon" size={40}
          onPress={() => navigation.dispatch(DrawerActions.openDrawer())}/>
        )
      };
    }
  }
})

const DrawerStack = createDrawerNavigator({
  Edit: { screen: EditProfileStack }
  Settings: { screen: SettingsStack }
})

const EditProfileStack = createStackNavigator({ 
  EditProfile: {
    screen: editProfile,
    navigationOptions: ({navigation}) => {
      return {
        title: "Edit Profile",
        headerLeft: (
          <Icon type="evilicon" name="chevron-left" size={50}
          onPress={() => navigation.navigate("MyProfile")}/>
        )
      };
    }
  }
});

const TabStack = createBottomTabNavigator({
  Feed: { screen: FeedStack },
  Profile: { screen: MyProfileStack },
});

const MainStack = createSwitchNavigator(
  {
    Home: TabStack,
    Drawer: DrawerStack
  },
  {
    initialRouteName: 'Home'
  }
);

const AppContainer = createAppContainer(MainStack);
Run Code Online (Sandbox Code Playgroud)

Jef*_*ang 3

解决方案

您需要按如下方式MyProfileStack输入DrawerStack

const DrawerStack = createDrawerNavigator({
  MyProfile: { screen: MyProfileStack }
  Edit: { screen: EditProfileStack }
  Settings: { screen: SettingsStack }
})


const TabStack = createBottomTabNavigator({
  Feed: { screen: FeedStack },
  Profile: { screen: DrawerStack },
});

const AppContainer = createAppContainer(MainStack);
Run Code Online (Sandbox Code Playgroud)

您可以使用各种组合。

为什么?

当您切换到另一屏幕时,SwitchNavigator 会放弃其他屏幕。所以你不能从已经退出的屏幕上调用抽屉。

ps:如果你想在切换屏幕时刷新屏幕,可以使用导航事件。使用onWillFocus