Как перемещаться между страницами в React Native?

#android #ios #reactjs #react-native #navigation

#Android #iOS #reactjs #react-native #навигация

Вопрос:

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

Я хочу просто иметь возможность переходить на другой экран одним нажатием кнопки. Я видел много людей, использующих эти стеки и устанавливающих множество зависимостей. Во-первых, когда я устанавливаю эти зависимости, я сталкиваюсь со многими ошибками, а во-вторых, мой App.js file в настоящее время возвращает один из моих существующих экранов. И я не могу найти пример, когда они возвращают экран в App.js функционируют, когда они используют эти стеки.

Если бы кто-нибудь мог показать мне лучший способ реализовать эту функцию или связать лучший пример, я был бы очень признателен.

Спасибо

Ответ №1:

Ознакомьтесь с руководством по запуску React Navigator здесь

Ответ №2:

если вы хотите перемещаться только на 2 экранах, вы можете использовать условный рендеринг в своем App.js вот так : … возврат (someCondition? Component1: Component2; )

но я лично предлагаю вам использовать react navigation, поскольку это правильный способ навигации между экранами

Ответ №3:

Предполагая, что вы собираетесь использовать react navigation.Ваш App.js функция может быть следующей:

 import * as React from 'react';
import { Button, View, Text } from 'react-native';
import { NavigationContainer } from '@react-navigation/native';
import { createStackNavigator } from '@react-navigation/stack';

function App({ navigation }) {
  return (
    <View style={{ flex: 1, alignItems: 'center', justifyContent: 'center' }}>
      <Text>Home</Text>
      <Button
        title="Another Screen"
        onPress={() => navigation.navigate('Another')}
      />
    </View>
  );
}
  

Приведенная выше функция приведет к переходу на другой экран с помощью onClick на кнопке.

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

1. Итак, с «Другим», как вы определяете другое в App.js ? Потому что я видел примеры, когда у людей было что-то вроде «импортировать Screen1 из ‘root …'».

2. Я импортировал экран, на который пытаюсь перейти с помощью нажатия кнопки, и заменил «Другой» своим именем экрана, и я получаю сообщение об ошибке: «navigation.navigate не является функцией. (В ‘navigation.navigate («Экран регистрации»)’, ‘navigation.navigate’ не определено)

Ответ №4:

Вот простой пример:

 import { Button, View } from 'react-native';
import { NavigationContainer } from '@react-navigation/native';
import { createStackNavigator } from '@react-navigation/stack';

function HomeScreen({ navigation }) {
  return (
    <View style={{ flex: 1, alignItems: 'center', justifyContent: 'center' }}>
      <Button
        title="Go to Profile"
        onPress={() => navigation.navigate('Profile')}
      />
    </View>
  );
}

function ProfileScreen({ navigation }) {
  return (
    <View style={{ flex: 1, alignItems: 'center', justifyContent: 'center' }}>
      <Button
        title="Go to Notifications"
        onPress={() => navigation.navigate('Notifications')}
      />
      <Button title="Go back" onPress={() => navigation.goBack()} />
    </View>
  );
}

function NotificationsScreen({ navigation }) {
  return (
    <View style={{ flex: 1, alignItems: 'center', justifyContent: 'center' }}>
      <Button
        title="Go to Settings"
        onPress={() => navigation.navigate('Settings')}
      />
      <Button title="Go back" onPress={() => navigation.goBack()} />
    </View>
  );
}

function SettingsScreen({ navigation }) {
  return (
    <View style={{ flex: 1, alignItems: 'center', justifyContent: 'center' }}>
      <Button title="Go back" onPress={() => navigation.goBack()} />
    </View>
  );
}

const Stack = createStackNavigator();

function MyStack() {
  return (
    <Stack.Navigator>
      <Stack.Screen name="Home" component={HomeScreen} />
      <Stack.Screen name="Notifications" component={NotificationsScreen} />
      <Stack.Screen name="Profile" component={ProfileScreen} />
      <Stack.Screen name="Settings" component={SettingsScreen} />
    </Stack.Navigator>
  );
}

export default function App() {
  return (
    <NavigationContainer>
      <MyStack />
    </NavigationContainer>
  );
} 
  

Пример в Expo

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

1. Моя проблема здесь в том, что вы определили все страницы на App.js файл, мои экраны будут довольно подробными, и поэтому я не могу писать код для всех экранов в одном файле.

2. Вы можете импортировать внешний компонент (экран) и использовать его. import {ScreenX} from './path_to_screenX' ....... <Stack.Screen name="ScreenX" component={ScreenX} />