Здравствуйте, ребята, у меня есть 5 контейнеров на панели вкладок, и я хотел бы знать, есть ли возможность вернуться на главный экран, если я выберу другой контейнер вкладок.

Итак, у меня есть следующие

https://snack.expo.io/@react-navigation/stacks-in-tabs-v3

Находясь на вкладке Home, я нажимаю Go to Details, а затем переключаюсь на вкладку Settings. Если я вернусь в Home контейнер, я хочу увидеть экран по умолчанию, который HomeScreen

Любой вариант?

2
Markus Hayner 11 Апр 2019 в 18:04

2 ответа

Лучший ответ

Вы можете переопределить tabBarOnPress navigationOptions каждого StackNavigator следующим образом:

const stacks = [
  { Home: HomeScreen, Details: DetailsScreen },
  { Settings: SettingsScreen, Details: DetailsScreen }
].reduce((stacksObj, stack) => {
  const initialRoute = Object.keys(stack)[0];
  stacksObj[initialRoute] = createStackNavigator(
    stack,
    {
      navigationOptions: {
        tabBarOnPress: ({ navigation }) => navigation.navigate({
          routeName: initialRoute,
          action: navigation.popToTop()
        })
      }
    }
  );
  return stacksObj 
}, {});

export default createAppContainer(createBottomTabNavigator(
  stacks,
  { /* same defaultNavigationOptions as the snack example */ }
));
0
zaytrix 11 Апр 2019 в 17:46

Потому что ваш DetailScreen вложен в стек Home, вы должны перейти еще на один уровень к этому экрану

  _navigateHome = () => {
    const navigateAction = NavigationActions.navigate({
      routeName: 'Home',
      action: NavigationActions.navigate({ routeName: 'Home' }),
    });
    this.props.navigation.dispatch(navigateAction);
  }
0
tuan.tran 11 Апр 2019 в 15:49