Пример навигации по представлениям в React Native Android?
После проверки документации React Native, я все еще не понимаю лучшего способа создания представлений и навигации между различными компонентами.
Я не хочу использовать какие-либо внешние компоненты, такие как:
https://github.com/Kureev/react-native-navbar/
https://github.com/23c/react-native-transparent-bar
https://github.com/superdami/react-native-custom-navigation
Мне не нужна панель навигации, я просто хочу установить вид и скользить влево, вправо, чтобы открыть вид, ничего больше.
Я знаю, что это что-то базовое, но я не могу найти полезного примера.
Пожалуйста, кто-нибудь может мне помочь? Любой функциональный пример в https://rnplay.org/?
Спасибо.
3 ответа
ОБНОВЛЕНИЕ 04/2018:
С момента моего первого ответа все изменилось, и сегодня для навигации актуальны две огромные библиотеки: реакция-навигация и реакция-нативная навигация.
Я напишу пример для реагирования-навигации, который является простой в использовании библиотекой и полным JS-сопровождением серьезных людей из сообщества.
Сначала установите библиотеку:
yarn add react-navigation
или же
npm install --save react-navigation
Затем в точке входа вашего приложения (index.js):
import Config from './config';
import { AppRegistry } from 'react-native';
import { StackNavigator } from 'react-navigation';
export const AppNavigator = StackNavigator(Config.navigation);
AppRegistry.registerComponent('appName', () => AppNavigator);
Вы можете видеть, что мы передаем объект в StackNavigator, это все наши конфигурации экранов, вот пример конфигурации:
import HomeScreen from "./HomeScreen";
import SettingsScreen from "./SettingsScreen";
const Config = {
navigation: {
Home: {
screen: HomeScreen
},
Settings: {
screen: SettingsScreen,
}
}
}
Теперь приложение знает каждый экран, который мы получили. Мы можем просто сказать "навигационной" функции перейти на наш экран настроек. Давайте посмотрим наш домашний экран:
class HomeScene extends Component {
constructor(props) {
super(props);
}
render () {
return (
<View>
<Button
title="Go to Settings"
onPress={() => this.props.navigation.navigate('Settings')}
/>
</View>
);
}
}
Как вы можете видеть, навигация увлажнит реквизит. И отсюда вы можете делать то, что хотите.
Перейдите к документации библиотеки, чтобы увидеть все, что вы можете сделать: изменить тип заголовка, заголовок, тип навигации,...
ПРЕДЫДУЩИЙ ОТВЕТ:
Посмотрите этот пример: https://github.com/h87kg/NavigatorDemo
Это полезный и хорошо написанный пример навигатора, лучше, чем тот, который вы только что написали, я думаю.
В основном следите за отношениями между LoginPage.js
а также MainPage.js
Я нашел этот пример: https://rnplay.org/apps/HPy6UA
И я написал об этом учебник: https://playcode.org/navigation-in-react-native/
Очень полезно понять навигацию в React Native:
'use strict';
var React = require('react-native');
var {
AppRegistry,
StyleSheet,
Text,
View,
Navigator,
TouchableOpacity,
} = React;
var SCREEN_WIDTH = require('Dimensions').get('window').width;
var BaseConfig = Navigator.SceneConfigs.FloatFromRight;
var CustomLeftToRightGesture = Object.assign({}, BaseConfig.gestures.pop, {
// Make it snap back really quickly after canceling pop
snapVelocity: 8,
// Make it so we can drag anywhere on the screen
edgeHitWidth: SCREEN_WIDTH,
});
var CustomSceneConfig = Object.assign({}, BaseConfig, {
// A very tighly wound spring will make this transition fast
springTension: 100,
springFriction: 1,
// Use our custom gesture defined above
gestures: {
pop: CustomLeftToRightGesture,
}
});
var PageOne = React.createClass({
_handlePress() {
this.props.navigator.push({id: 2,});
},
render() {
return (
<View style={[styles.container, {backgroundColor: 'green'}]}>
<Text style={styles.welcome}>Greetings!</Text>
<TouchableOpacity onPress={this._handlePress}>
<View style={{paddingVertical: 10, paddingHorizontal: 20, backgroundColor: 'black'}}>
<Text style={styles.welcome}>Go to page two</Text>
</View>
</TouchableOpacity>
</View>
)
},
});
var PageTwo = React.createClass({
_handlePress() {
this.props.navigator.pop();
},
render() {
return (
<View style={[styles.container, {backgroundColor: 'purple'}]}>
<Text style={styles.welcome}>This is page two!</Text>
<TouchableOpacity onPress={this._handlePress}>
<View style={{paddingVertical: 10, paddingHorizontal: 20, backgroundColor: 'black'}}>
<Text style={styles.welcome}>Go back</Text>
</View>
</TouchableOpacity>
</View>
)
},
});
var SampleApp = React.createClass({
_renderScene(route, navigator) {
if (route.id === 1) {
return <PageOne navigator={navigator} />
} else if (route.id === 2) {
return <PageTwo navigator={navigator} />
}
},
_configureScene(route) {
return CustomSceneConfig;
},
render() {
return (
<Navigator
initialRoute={{id: 1, }}
renderScene={this._renderScene}
configureScene={this._configureScene} />
);
}
});
var styles = StyleSheet.create({
container: {
flex: 1,
justifyContent: 'center',
alignItems: 'center',
backgroundColor: '#F5FCFF',
},
welcome: {
fontSize: 20,
textAlign: 'center',
margin: 10,
color: 'white',
},
});
AppRegistry.registerComponent('SampleApp', () => SampleApp);
module.exports = SampleApp;
Я предлагаю вам использовать ответную навигацию, вы можете взглянуть на пример Navigator Playground
- Компоненты, созданные для iOS и Android
- Выберите между TabNavigator, DrawerNavigator и StackNavigator.
- Реализуйте свой CustomNavigator
- Разработайте свои собственные виды навигации
- Обмен логикой между мобильными приложениями, веб-приложениями с рендерингом сервера.
- Документация довольно проста
- Это избыточный интегрированный.
- Это супер просто!
- Станет официальным штурманом, предложенным реагировать-родным!
Установите навигационный модуль.
npm install --save react-navigation
Импортируйте его в свое приложение
import {
TabNavigator,
} from 'react-navigation';
const BasicApp = TabNavigator({
Main: {screen: MainScreen},
Setup: {screen: SetupScreen},
});
... и перемещаться
class MainScreen extends React.Component {
static navigationOptions = {
label: 'Home',
};
render() {
const { navigate } = this.props.navigation;
return (
<Button
title="Go to Setup Tab"
onPress={() => navigate('Setup')}
/>
);
}
}