Ich erkunde die Möglichkeiten von React Native, während ich eine Demo-App mit benutzerdefinierter Navigation zwischen Ansichten mithilfe von Navigator
Komponenten entwickle .
Die Haupt-App-Klasse rendert den Navigator und renderScene
gibt die übergebene Komponente zurück:
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 });
}
}}
/>
);
}
}
Im Moment enthält die App zwei Ansichten:
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>
);
}
}
Was ich herausfinden möchte, ist:
Ich sehe in den Protokollen, dass beim Drücken von "Gehe zu Feed"
renderScene
mehrmals aufgerufen wird, obwohl die Ansicht einmal korrekt gerendert wird. Funktioniert die Animation so?index.ios.js:57 Object {name: 'WelcomeView', component: function} index.ios.js:57 Object {name: 'FeedView', component: function} // renders Feed View
Entspricht mein Ansatz im Allgemeinen dem React-Weg oder kann er besser durchgeführt werden?
Was ich erreichen möchte, ist etwas Ähnliches, NavigatorIOS
jedoch ohne Navigationsleiste (einige Ansichten haben jedoch eine eigene benutzerdefinierte Navigationsleiste).
quelle
Antworten:
Ihr Ansatz sollte großartig funktionieren. In großen Apps bei Fb vermeiden
require()
wir es, die for the scene-Komponente aufzurufen, bis wir sie rendern, was ein wenig Startzeit sparen kann.Die
renderScene
Funktion sollte aufgerufen werden, wenn die Szene zum ersten Mal in den Navigator verschoben wird. Es wird auch für die aktive Szene aufgerufen, wenn der Navigator neu gerendert wird. Wenn Sie sehen,renderScene
dass Sie nach a mehrmals aufgerufen werdenpush
, handelt es sich wahrscheinlich um einen Fehler.Der Navigator ist noch in Arbeit, aber wenn Sie Probleme damit haben, melden Sie sich bitte bei github an und markieren Sie mich! (@ericvicenti)
quelle
Navigator
ist jetzt veraltet in könnenRN 0.44.0
Siereact-native-deprecated-custom-components
stattdessen verwenden, um Ihre vorhandene Anwendung zu unterstützen, die verwendet wirdNavigator
.quelle
Wie bereits erwähnt, ist Navigator seit Version 0.44 veraltet, kann jedoch weiterhin importiert werden, um ältere Anwendungen zu unterstützen:
Gemäß den Dokumenten (React Native v0.54) Navigieren zwischen Bildschirmen . Es wird jetzt empfohlen, React Navigation zu verwenden, wenn Sie gerade erst anfangen, oder NavigatorIOS für Nicht-Android-Anwendungen
NB : Zum Zeitpunkt der Bereitstellung dieser Antwort war React Native auf Version 0.54 eingestellt
quelle
Die Navigator-Komponente ist jetzt veraltet. Sie könnten React-Native-Router-Flux von askonov verwenden, es hat eine große Vielfalt und unterstützt viele verschiedene Animationen und ist effizient
quelle