#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>
);
}
Комментарии:
1. Моя проблема здесь в том, что вы определили все страницы на App.js файл, мои экраны будут довольно подробными, и поэтому я не могу писать код для всех экранов в одном файле.
2. Вы можете импортировать внешний компонент (экран) и использовать его.
import {ScreenX} from './path_to_screenX' ....... <Stack.Screen name="ScreenX" component={ScreenX} />