react-native
Navigator-Best Practices
Suche…
Navigator
Navigator
ist der Standardnavigator von React Native. Eine Navigator
Komponente verwaltet einen Stapel von Routenobjekten und stellt Methoden zum Verwalten dieses Stapels bereit.
<Navigator ref={(navigator) => { this.navigator = navigator }} initialRoute={{ id: 'route1', title: 'Route 1' }} renderScene={this.renderScene.bind(this)} configureScene={(route) => Navigator.SceneConfigs.FloatFromRight} style={{ flex: 1 }} navigationBar={ // see "Managing the Navigation Bar" below <Navigator.NavigationBar routeMapper={this.routeMapper} /> } />
Routenstapel verwalten
initialRoute
die initialRoute
. Eine Route ist einfach ein Javascript-Objekt und kann die gewünschte Form und die gewünschten Werte annehmen. Dies ist die primäre Methode, mit der Sie Werte und Methoden zwischen Komponenten in Ihrem Navigationsstapel übergeben.
Der Navigator
weiß basierend auf dem von seiner renderScene
zurückgegebenen Wert, was renderScene
.
renderScene(route, navigator) { if (route.id === 'route1') { return <ExampleScene navigator={navigator} title={route.title} />; // see below } else if (route.id === 'route2') { return <ExampleScene navigator={navigator} title={route.title} />; // see below } }
Stellen wir uns eine Implementierung von ExampleScene
in diesem Beispiel vor:
function ExampleScene(props) { function forward() { // this route object will passed along to our `renderScene` function we defined above. props.navigator.push({ id: 'route2', title: 'Route 2' }); } function back() { // `pop` simply pops one route object off the `Navigator`'s stack props.navigator.pop(); } return ( <View> <Text>{props.title}</Text> <TouchableOpacity onPress={forward}> <Text>Go forward!</Text> </TouchableOpacity> <TouchableOpacity onPress={back}> <Text>Go Back!</Text> </TouchableOpacity> </View> ); }
Navigator konfigurieren
Sie können die Übergänge des Navigator
mit der configureScene
Eigenschaft configureScene
. Dies ist eine Funktion, die übergeben wird route
Objekt und muss ein Konfigurationsobjekt zurückzukehren. Dies sind die verfügbaren Konfigurationsobjekte:
- Navigator.SceneConfigs.PushFromRight (Standardeinstellung)
- Navigator.SceneConfigs.FloatFromRight
- Navigator.SceneConfigs.FloatFromLeft
- Navigator.SceneConfigs.FloatFromBottom
- Navigator.SceneConfigs.FloatFromBottomAndroid
- Navigator.SceneConfigs.FadeAndroid
- Navigator.SceneConfigs.HorizontalSwipeJump
- Navigator.SceneConfigs.HorizontalSwipeJumpFromRight
- Navigator.SceneConfigs.VerticalUpSwipeJump
- Navigator.SceneConfigs.VerticalDownSwipeJump
Sie können eines dieser Objekte ohne Änderung zurückgeben oder das Konfigurationsobjekt ändern, um die Navigationsübergänge anzupassen. So können Sie beispielsweise die Breite des UINavigationController
ändern, um den interactivePopGestureRecognizer
iOS UINavigationController
genauer zu emulieren:
configureScene={(route) => { return { ...Navigator.SceneConfigs.FloatFromRight, gestures: { pop: { ...Navigator.SceneConfigs.FloatFromRight.gestures.pop, edgeHitWidth: Dimensions.get('window').width / 2, }, }, }; }}
Verwalten der Navigationsleiste
Die Navigator
Komponente wird mit einer navigationBar
Komponente geliefert, die theoretisch jede ordnungsgemäß konfigurierte React-Komponente aufnehmen kann. Die häufigste Implementierung verwendet jedoch die Standardeinstellung Navigator.NavigationBar
. Dies routeMapper
eine routeMapper
, mit der Sie das Erscheinungsbild der Navigationsleiste basierend auf der Route konfigurieren können.
Ein routeMapper
ist ein routeMapper
Javascript-Objekt mit drei Funktionen: Title
, RightButton
und LeftButton
. Zum Beispiel:
const routeMapper = { LeftButton(route, navigator, index, navState) { if (index === 0) { return null; } return ( <TouchableOpacity onPress={() => navigator.pop()} style={styles.navBarLeftButton} > <Text>Back</Text> </TouchableOpacity> ); }, RightButton(route, navigator, index, navState) { return ( <TouchableOpacity onPress={route.handleRightButtonClick} style={styles.navBarRightButton} > <Text>Next</Text> </TouchableOpacity> ); }, Title(route, navigator, index, navState) { return ( <Text> {route.title} </Text> ); }, };
Mehr sehen
Weitere Informationen zu den einzelnen Requisiten finden Sie in der offiziellen React Native-Dokumentation für Navigator
und im React Native-Handbuch zum Verwenden von Navigatoren .
Verwenden Sie die reag-navigation für die Navigation in reaktiven nativen Apps
Mit der reag-navigation können Sie Ihrer App ganz einfach eine Navigation hinzufügen.
Install-Navigation installieren
npm install --save react-navigation
Beispiel:
import { Button, View, Text, AppRegistry } from 'react-native';
import { StackNavigator } from 'react-navigation';
const App = StackNavigator({
FirstPage: {screen: FirstPage},
SecondPage: {screen: SecondPage},
});
class FirstPage extends React.Component {
static navigationOptions = {
title: 'Welcome',
};
render() {
const { navigate } = this.props.navigation;
return (
<Button
title='Go to Second Page'
onPress={() =>
navigate('SecondPage', { name: 'Awesomepankaj' })
}
/>
);
}
}
class SecondPage extends React.Component {
static navigationOptions = ({navigation}) => ({
title: navigation.state.params.name,
});
render() {
const { goBack } = this.props.navigation;
return (
<View>
<Text>Welcome to Second Page</Text>
<Button
title="Go back to First Page"
onPress={() => goBack()}
/>
</View>
);
}
}
reaktives Navigieren mit reaktativem Router-Fluss
Installieren Sie mit npm install --save react-native-router-flux
In reaktativem Router-Fluss wird jede Route als <Scene>
<Scene key="home" component={LogIn} title="Home" initial />
key
Eine eindeutige Zeichenfolge, mit der auf die jeweilige Szene verwiesen werden kann.
component
Welche Komponente soll angezeigt werden, hier ist es
title
Machen Sie eine NavBar und geben Sie einen Titel "Home"
initial
Ist dies der erste Bildschirm der App
Beispiel:
import React from 'react';
import { Scene, Router } from 'react-native-router-flux';
import LogIn from './components/LogIn';
import SecondPage from './components/SecondPage';
const RouterComponent = () => {
return (
<Router>
<Scene key="login" component={LogIn} title="Login Form" initial />
<Scene key="secondPage" component={SecondPage} title="Home" />
</Router>
);
};
export default RouterComponent;
Importieren Sie diese Datei in die Haupt-App.js (Indexdatei) und rendern Sie sie. Für weitere Informationen besuchen Sie diesen Link .