J'explore les possibilités de React Native lors du développement d'une application de démonstration avec une navigation personnalisée entre les vues à l'aide de Navigator
composant .
La classe principale de l'application rend le navigateur et à l'intérieur de renderScene
renvoie 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 qu'en appuyant sur "aller au fil", renderScene
est appelé plusieurs fois, bien que la vue s'affiche correctement une fois. Est-ce ainsi que l'animation fonctionne?
index.ios.js:57 Object {name: 'WelcomeView', component: function}
index.ios.js:57 Object {name: 'FeedView', component: function}
// renders Feed View
En règle générale, mon approche est-elle conforme à la méthode React) ou peut-elle être améliorée?
Ce que je veux réaliser est similaire à NavigatorIOS
mais sans la barre de navigation (toutefois, certaines vues auront leur propre barre de navigation personnalisée).
Votre approche devrait bien fonctionner. Dans les grandes applications en Fb, nous évitons d'appeler la require()
pour le composant scène jusqu'au rendu, ce qui peut économiser un peu de temps de démarrage.
La fonction renderScene
doit être appelée lorsque la scène est poussée pour la première fois dans le navigateur. Il sera également appelé pour la scène active lorsque le navigateur sera rendu de nouveau. Si vous voyez renderScene
être appelé plusieurs fois après un Push
, il s'agit probablement d'un bogue.
Le navigateur est toujours un travail en cours, mais si vous rencontrez des problèmes, veuillez le déposer sur github et me taguer! (@ericvicenti)
Navigator
est obsolète dans RN 0.44.0
vous pouvez utiliser react-native-deprecated-custom-components
au lieu de supporter votre application existante qui utilise Navigator
.
Le composant Navigator est obsolète maintenant. Vous pouvez utiliser react-native-router-flux de askonov, il est très varié et prend en charge de nombreuses animations différentes et est efficace.
Comme d'autres l'ont déjà mentionné, Navigator est obsolète depuis la version 0.44, mais peut toujours être importé pour prendre en charge des applications plus anciennes:
Navigator a été supprimé du noyau React Package natif dans la version 0.44. Le module a été déplacé vers un package react-native-custom-components pouvant être importé par votre application afin de maintenir la compatibilité avec les versions antérieures.
Pour voir les documents d'origine de Navigator, veuillez basculer vers une version plus ancienne des documents.
Selon la documentation (React Native v0.54) Navigation entre les écrans . Il est maintenant recommandé d'utiliser Navigation React si vous commencez tout juste à démarrer, ou NavigatorIOS pour les applications non-Android
Si vous commencez tout juste à vous familiariser avec la navigation, vous souhaiterez probablement utiliser la navigation par réaction . React Navigation fournit une solution de navigation facile à utiliser, avec la possibilité de présenter la navigation sur pile et les modèles de navigation à onglets communs sur iOS et Android.
...
Si vous ne ciblez que iOS, vous pouvez également choisir NavigatorIOS comme moyen de fournir une apparence et une convivialité natives avec une configuration minimale. fournit un wrapper autour de la classe UINavigationController native.
[~ # ~] nb [~ # ~] : Au moment de fournir cette réponse, React Native était à la version 0.54