Реагировать на навигацию - как вложить в себя NNNAVIGator - PullRequest
0 голосов
/ 11 апреля 2019

Я использую реагирующую навигацию, я хочу открыть ящик на экране MyProfile с возможностью перехода на экран EditProfile и Настройки . Но я не могу понять, как открыть ящик, когда нажимаю на кнопку MyProfile .

App.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);

1 Ответ

0 голосов
/ 11 апреля 2019

Решение

Вам необходимо указать 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);

Вы можете использовать различные комбинации.

Почему?

SwitchNavigator переустанавливает другие экраны, когда вы переключаетесь на другой.Таким образом, вы не можете вызвать ящик с экрана уже подал в отставку.

ps: Вы можете использовать события навигации , если хотите обновить экран при смене экрана.Используйте onWillFocus.

...