Как добавить createBottomTabNavigator на тот же экран с createStackNavigator

#react-native #react-navigation #stack-navigator #tabnavigator

#react-native #react-навигация #stack-navigator #tabnavigator

Вопрос:

На моем главном экране (я использовал App.js в качестве моего домашнего) у меня есть createStackNavigator с createAppContainer для отображения всех экранов с помощью React-Navigation. Это сработало, и я могу явно перейти к любому из этих экранов с любого экрана. Теперь я хочу добавить панель навигации нижней вкладки на главный экран с помощью «createBottomTabNavigator».

Вот упрощенная версия моих кодов:

 import { createStackNavigator, createAppContainer, createBottomTabNavigator  } from 'react-navigation';
import Screen1 from './Screens/Screen1';
import Screen2 from './Screens/Screen2';
import Screen3 from './Screens/Screen3';

class HomeScreen extends React.Component {
   render() {
      return (
         <View><Text>Welcome</Text></View>
      );
   }
 }

 const AppNavigator = createStackNavigator({
   Home: { screen: HomeScreen },
   Screen1: { screen: Screen1 },
   Screen2: { screen: Screen2 },
   Screen3: { screen: Screen3 },
 });

 export default createAppContainer(AppNavigator);
  

Я хочу добавить панель навигации внизу, вот так:

 const TabNavigator = createBottomTabNavigator({
   Home: { screen: HomeScreen },
   Screen3: { screen: Screen3 },
});

export default createAppContainer(TabNavigator);
  

Это не позволит использовать два «экспорта по умолчанию» на одной странице. Как я могу добавить «createBottomTabNavigator», сохранив «createStackNavigator» для отображения всех моих экранов?

Ответ №1:

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

 import { createStackNavigator, createAppContainer, createBottomTabNavigator } from 'react-navigation';
import Screen1 from './Screens/Screen1';
import Screen2 from './Screens/Screen2';
import Screen3 from './Screens/Screen3';

class HomeScreen extends React.Component {
  render() {
    return (
       <View><Text>Welcome</Text></View>
    );
 } 
}

const AppNavigator = createStackNavigator({
  Home: { screen: TabNavigator },
  Screen1: { screen: Screen1 },
  Screen2: { screen: Screen2 },
  Screen3: { screen: Screen3 },
});

const TabNavigator = createBottomTabNavigator({
  Home: { screen: HomeScreen },
  Screen3: { screen: Screen3 },
});

export default createAppContainer(AppNavigator);
  

Ответ №2:

Что-то вроде этого.

 import { createStackNavigator, createAppContainer, createBottomTabNavigator } from 'react-navigation';
import Screen1 from './Screens/Screen1';
import Screen2 from './Screens/Screen2';
import Screen3 from './Screens/Screen3';
import Screen4 from './Screens/Screen4';

const Home = createStackNavigator({
  Screen1, Screen2
});

const List = createStackNavigator({
  Screen3, Screen4
});

const TabNav = createBottomTabNavigator({
  Home, List
});

export default createAppContainer(TabNav);
  

Здесь вашим домом может быть Screen1 и Screen2 может быть элемент Screen1 и то же самое для Screen3 and Screen4

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

1. Просто вопрос, когда вы объявляете более одного экрана для «Home», а затем добавляете «Home» в BottomTabNavigator, всегда ли вкладка «Home» переходит к первому экрану, который вы объявили для «Home»?

2. Сначала он, как всегда, перейдет к первому экрану, например, здесь к screen1, но если вы хотите добавить еще экран, вам просто нужно добавить его в свой домашний стек, поскольку он похож на Screen1, Screen2, Screen3. затем, если вам это нужно, перейдите к какому-нибудь экранному примеру Screen3, вы просто вызываете this.props.navigation.navigate(‘Screen3’, {name: ‘somename’}); при нажатии на какую-либо кнопку