Реагировать на собственную вложенную навигацию - вернуться к исходному маршруту навигатора стека при нажатии на маршрут родительского ящика - PullRequest
0 голосов
/ 01 февраля 2019

Я использую следующую настройку навигации в моем собственном проекте реакции.Здесь я использую навигацию по ящикам и стековую навигацию.

import MainScreen from '../components/MainScreen';
import SettingsScreen from '../components/SettingsScreen';
import FriendsListScreen from '../components/FriendsListScreen';
import FriendProfileScreen from '../components/FriendProfileScreen';

// stack navigator - 1
const MainScreenStack = createStackNavigator(
    {
        MainScreen: MainScreen,
        FriendsListScreen: FriendsListScreen,
        FriendProfileScreen: FriendProfileScreen,
    },
    {
        initialRouteName: 'MainScreen',
        navigationOptions: {
            drawerLabel: "Home"
        },
    }
);

// stack navigator - 2
const SettingsScreenStack = createStackNavigator(
    {
        SettingsScreen: SettingsScreen
    },
    {
        navigationOptions: {
            drawerLabel: "Settings"
        },
    }
);

// drawer navigation (stack navigator 1 + 2)
const AppNavigator = DrawerNavigator({
  MainScreen: MainScreenStack,
  SettingsScreen: SettingsScreenStack
});

const AppContainer = createAppContainer(AppNavigator)

Сценарий:

  • В ящике я нажимаю ссылку «Домой» и перехожу к главному экрану.
  • На главном экране я нажимаю кнопку и перехожу к FriendsListScreen.
  • На странице FriendsListScreen я снова открываю ящик и нажимаю ссылку «Домой».Ящик закрывается, и навигация не выполняется.

Макет:

enter image description here enter image description here enter image description here

Есть ли способ вернуться обратно на главный экран, когда я нажимаю ссылку "Главная" из ящика?

1 Ответ

0 голосов
/ 07 февраля 2019

Я нашел обходной путь для этого, создав собственное содержимое ящика, как показано ниже:

import {DrawerItems, SafeAreaView, createStackNavigator, createDrawerNavigator, createAppContainer} from "react-navigation";

const DrawerContent = (props) => (
  <ScrollView>
    <SafeAreaView forceInset={{top: 'always', horizontal: 'never'}}>
      <DrawerItems {...props} onItemPress={ ({route, focused}) => {
        if (route.key === "MainScreen") {
          if (route.routes.length === 1) {
            props.navigation.closeDrawer();
          } else {
            props.navigation.navigate(route.routes[0].routeName);
          }
        } else {
          props.onItemPress({route, focused});
        }
      }} />
    </SafeAreaView>
  </ScrollView>
);

const AppNavigator = DrawerNavigator({
  MainScreen: MainScreenStack,
  SettingsScreen: SettingsScreenStack
}, {contentComponent: DrawerContent});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...