Реагирующая навигация Создайте materialtoptabnavigator внутри экрана

#react-navigation

#реагирующая навигация

Вопрос:

Реагирующая навигация createMaterialTopTabNavigator показывает довольно классную настройку в верхней части страницы документации:

введите описание изображения здесь

Обратите внимание, что верхний стек навигатора, похоже, находится внутри экрана. Вверху есть заголовок «Верхние вкладки материалов», и мы можем вернуться к «Примерам»

Как ни странно, эта настройка не приведена ни в одном из примеров.

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

Не мог бы кто-нибудь, пожалуйста, поделиться примером кода для этого?

В настоящее время у меня есть базовая навигация по нижней вкладке с

 <BottomTab.Screen
  name="Tabs"
  component={TabsNavigator}
/> 
  

и затем

 function TabsNavigator() {
  const MyTabs = createMaterialTopTabNavigator();
  return (
    <MyTabs.Navigator
      <MyTabs.Screen name="Upcoming" component={TabsUpcomingScreen} />
      <MyTabs.Screen name="Past" component={TabsPastScreen} />
    </MyTabs.Navigator>
  );
}
  

Хотя это работает при выполнении navigation.navigate('Tabs', { screen: 'Upcoming' }); , мне не хватает экрана, содержащего вкладки … или экрана «Вкладки» (как в примере, это экран «Вкладки материала сверху»)

Я мог бы сделать что-то вроде этого:

 function TabsNavigator() {
  const TabsStack = createStackNavigator();
  return (
    <TabsStack.Navigator>
      <TabsStack.Screen name="Tabs" component={TabsScreen} options={{ headerTitle: 'Tabs' }} />
    </TabsStack.Navigator>
  );
}

function TabsScreen() {
  const MyTabs = createMaterialTopTabNavigator();
  return (
    <MyTabs.Navigator
      <MyTabs.Screen name="Upcoming" component={TabsUpcomingScreen} />
      <MyTabs.Screen name="Past" component={TabsPastScreen} />
    </MyTabs.Navigator>
  );
}
  

Но тогда я не могу перейти к определенной вкладке с navigation.navigate('Tabs', { screen: 'Upcoming' });

Ответ №1:

Если вы хотите перейти на какую-либо вкладку внутри createMaterialTopTabNavigator.Вместо navigation.navigate(‘Tabs’, { screen: ‘Предстоящий’ }) используйте navigation.jumpTo(‘Tabs’, { name: ‘Предстоящий’ }); https://reactnavigation.org/docs/material-top-tab-navigator#jumpto

Комментарии:

1. Я пробовал это, но если я сначала перейду к вкладкам и выберу «Прошлое», затем перейду на другой экран и нажму кнопку navigation.jumpTo(‘Tabs’, { name: ‘Предстоящий’ }), это приведет к экрану вкладок, но он остается на «Прошлом» и не отображается.не переходите к «Предстоящему»

2. НО, как ни странно, если я сделаю navigation?.navigate('Tabs'); следующее navigation.jumpTo('Upcoming'); , тогда это сработает