Навигатор нижних вкладок навигации с реакцией плюс модальный экран

#react-native #react-navigation

#react-родной #реагирующая навигация

Вопрос:

У меня есть следующий код для создания вкладки с использованием React Native Navigation версии 6.x:

 import { createBottomTabNavigator } from '@react-navigation/bottom-tabs';

const Tab = createBottomTabNavigator();

function MyTabs() {
  return (
    <Tab.Navigator>
      <Tab.Screen name="Home" component={HomeScreen} />
      <Tab.Screen name="Settings" component={SettingsScreen} />
    </Tab.Navigator>
  );
}
 

На главном экране есть кнопка, которая должна вызывать модальный экран.

Мой вопрос: как мне добавить этот модальный экран в мой навигатор, чтобы вызвать его с рабочего стола, и каким будет этот код вызова?

Спасибо!

Ответ №1:

Вам не нужно включать модальный в навигатор, чтобы открыть его с главной страницы.

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

 const HomeScreen = () => {
  const [modalVisible, setModalVisible] = useState(false);

  function _myModal() {

    return(
      <Modal
        animationType="slide"
        visible={modalVisible}
        onRequestClose={() => {setModalVisible(false)}}
      >
        <Text>Hello, I am a modal!</Text>
      </Modal>
    )
  }

  // your code
  return (
    <View>
      {/*your code*/}
      <Pressable
        onPress={() => setModalVisible(true)}
      >
        <Text>Show Modal</Text>
      </Pressable>
      {_myModal()}
    </View>
  );
};
 

В документации, основанной на React, также есть пример для компонента класса на случай, если вы работаете с ними, и дополнительная информация, которая также должна вам помочь.

Ответ №2:

Если вы хотите открыть модальный экран со своей домашней страницы, вам следует создать навигатор стека главного экрана и добавить два экрана в этот стек (домашний и модальный экраны), а затем перейти к этому модальному экрану, нажав кнопку.

Навигатор вкладок (корневая навигация MyTabs)

 ...
function MyTabs() {
  return (
    <Tab.Navigator>
      <Tab.Screen name="Home" component={HomeStack} />
      <Tab.Screen name="Settings" component={SettingsScreen} />
    </Tab.Navigator>
  );
}
 

Навигатор стека (домашний пакет)

 cosnt Stack = createStackNavigator();

function HomeStack() {
  return (
    <Stack.Navigator>
      <Stack.Screen name="HomeScreen" component={HomeScreen} />
      <Stack.Screen name="ModalScreen" component={ModalScreen}
         options={{ presentation: 'modal' }} />
    </Stack.Navigator>
  );
}
 

Рабочий стол

 export default function HomeScreen({navigation}) {
   return (
      <View>
          <TouchableOpacity onPress={() => navigation.navigate('ModalScreen'}>
              <Text>Open ModalScreen</Text>
          </TouchableOpacity>
      </View>
   )
}