react-native
Meilleures pratiques du navigateur
Recherche…
Navigateur
Navigator
est le navigateur par défaut de React Native. Un composant Navigator
gère une pile d'objets route et fournit des méthodes pour gérer cette pile.
<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} /> } />
Gestion de la pile de route
Tout d’abord, notez l’accessoire initialRoute
. Une route est simplement un objet javascript, et peut prendre la forme que vous voulez et avoir les valeurs que vous voulez. C'est la principale manière de transmettre des valeurs et des méthodes entre les composants de votre pile de navigation.
Le Navigator
sait quoi restituer en fonction de la valeur renvoyée par son outil 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 } }
Imaginons une implémentation de ExampleScene
dans cet exemple:
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> ); }
Configuration du navigateur
Vous pouvez configurer les transitions du Navigator
avec le composant configureScene
. Ceci est une fonction qui a passé l'objet route
et doit retourner un objet de configuration. Voici les objets de configuration disponibles:
- Navigator.SceneConfigs.PushFromRight (par défaut)
- 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
Vous pouvez renvoyer l'un de ces objets sans modification ou modifier l'objet de configuration pour personnaliser les transitions de navigation. Par exemple, pour modifier la largeur des UINavigationController
aux bords pour émuler plus étroitement le UINavigationController
interactivePopGestureRecognizer
UINavigationController
iOS:
configureScene={(route) => { return { ...Navigator.SceneConfigs.FloatFromRight, gestures: { pop: { ...Navigator.SceneConfigs.FloatFromRight.gestures.pop, edgeHitWidth: Dimensions.get('window').width / 2, }, }, }; }}
Gestion de la barre de navigation
Le composant Navigator
est fourni avec un élément de navigationBar
qui peut théoriquement prendre tout composant React correctement configuré. Mais l'implémentation la plus courante utilise le Navigator.NavigationBar
par défaut. Cela prend un accessoire de routeMapper
que vous pouvez utiliser pour configurer l'apparence de la barre de navigation en fonction de l'itinéraire.
Un routeMapper
est un objet JavaScript classique avec trois fonctions: Title
, RightButton
et LeftButton
. Par exemple:
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> ); }, };
Voir plus
Pour une documentation plus détaillée de chaque accessoire, consultez la documentation officielle React pour Navigator
et le guide React Native sur l' utilisation des navigateurs .
Utiliser rea-navigation pour naviguer dans les applications natives de réaction
Avec l'aide de react-navigation , vous pouvez ajouter très facilement la navigation à votre application.
Installer react-navigation
npm install --save react-navigation
Exemple:
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>
);
}
}
Navigation ré-native avec react-native-router-flux
Installez en utilisant npm install --save react-native-router-flux
Dans rea-native-routeur-flux, chaque route est appelée <Scene>
<Scene key="home" component={LogIn} title="Home" initial />
key
Chaîne unique pouvant être utilisée pour faire référence à la scène particulière.
component
Quel composant montrer, ici c'est
title
faire un NavBar et lui donner un titre 'Home'
initial
Est-ce le premier écran de l'application
Exemple:
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;
Importez ce fichier dans le fichier principal App.js (fichier d'index) et rendez-le. Pour plus d'informations, visitez ce lien .