J'explore les possibilités de React Native tout en développant une application de démonstration avec une navigation personnalisée entre les vues à l'aide d'un Navigator
composant .
La classe d'application principale rend le navigateur et l'intérieur renderScene
retourne le composant passé:
class App extends React.Component {
render() {
return (
<Navigator
initialRoute={{name: 'WelcomeView', component: WelcomeView}}
configureScene={() => {
return Navigator.SceneConfigs.FloatFromRight;
}}
renderScene={(route, navigator) => {
// count the number of func calls
console.log(route, navigator);
if (route.component) {
return React.createElement(route.component, { navigator });
}
}}
/>
);
}
}
Pour l'instant, l'application contient deux vues:
class FeedView extends React.Component {
render() {
return (
<View style={styles.container}>
<Text>
Feed View!
</Text>
</View>
);
}
}
class WelcomeView extends React.Component {
onPressFeed() {
this.props.navigator.push({
name: 'FeedView',
component: FeedView
});
}
render() {
return (
<View style={styles.container}>
<Text style={styles.welcome}>
Welcome View!
</Text>
<Text onPress={this.onPressFeed.bind(this)}>
Go to feed!
</Text>
</View>
);
}
}
Ce que je veux comprendre, c'est:
Je vois dans les journaux que lorsque vous appuyez sur "aller à l'alimentation"
renderScene
est appelé plusieurs fois bien que la vue s'affiche correctement une fois. Est-ce ainsi que fonctionne l'animation?index.ios.js:57 Object {name: 'WelcomeView', component: function} index.ios.js:57 Object {name: 'FeedView', component: function} // renders Feed View
En général, mon approche est-elle conforme à la méthode React, ou peut-elle être améliorée?
Ce que je veux réaliser, c'est quelque chose de similaire NavigatorIOS
mais sans la barre de navigation (cependant, certaines vues auront leur propre barre de navigation personnalisée).
la source
Réponses:
Votre approche devrait très bien fonctionner. Dans les grandes applications de Fb, nous évitons d'appeler le
require()
composant de scène jusqu'à ce que nous le rendions, ce qui peut gagner un peu de temps au démarrage.La
renderScene
fonction doit être appelée lorsque la scène est envoyée pour la première fois dans le navigateur. Il sera également appelé pour la scène active lorsque le navigateur sera de nouveau rendu. Si vous voyezrenderScene
être appelé plusieurs fois après unpush
, c'est probablement un bogue.Le navigateur est toujours en cours de travail, mais si vous rencontrez des problèmes, veuillez le déposer sur github et me taguer! (@ericvicenti)
la source
Navigator
est désormais obsolète carRN 0.44.0
vous pouvez l'utiliser à lareact-native-deprecated-custom-components
place pour prendre en charge votre application existante qui utiliseNavigator
.la source
Comme d'autres l'ont mentionné précédemment, Navigator est obsolète depuis la v0.44, mais peut toujours être importé pour prendre en charge des applications plus anciennes:
Selon les docs (React Native v0.54) Naviguer entre les écrans . Il est maintenant recommandé d'utiliser React Navigation si vous ne faites que commencer, ou NavigatorIOS pour les applications non Android
NB : Au moment de fournir cette réponse, React Native était à la version 0.54
la source
Le composant Navigator est désormais obsolète. Vous pouvez utiliser react-native-router-flux par askonov, il a une grande variété et prend en charge de nombreuses animations différentes et est efficace
la source