Benutzerdefinierte Navigation mit der Navigator-Komponente in React-Native

Lesezeit: 3 Minuten

Benutzer-Avatar
Kosmetika

Ich erkunde Möglichkeiten von Nativ reagieren während der Entwicklung einer Demo-App mit benutzerdefinierter Navigation zwischen Ansichten mit Hilfe von Navigator Komponente.

Die Haupt-App-Klasse rendert navigator und inside renderScene gibt bestandene 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 „Zum Feed gehen“ renderScene wird mehrmals aufgerufen, 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 es besser gemacht werden?

Was ich erreichen möchte, ist etwas ähnliches NavigatorIOS aber ohne die Navigationsleiste (einige Ansichten haben jedoch ihre eigene benutzerdefinierte Navigationsleiste).

  • @ericvicenti Dieses Beispiel sollte in der enthalten sein Navigator-Seite in den Dokumenten. Es ist vollständiger und vermittelt ein besseres Bild davon, wie die Navigator-Komponente im Kontext verwendet wird.

    – Greatwitenord

    8. April 2016 um 14:13 Uhr


  • Wenn Sie nur Ihr Beispiel ausprobieren, sollte sich die Szene automatisch ändern, wenn ein Navigator-Push erfolgt? Für mich zeigt Ihr Beispiel nie die Feed-Ansicht! Text, daher frage ich mich, ob sich in den letzten Versionen etwas geändert hat.

    – Jan

    19. Dezember 2016 um 13:17 Uhr

Ihr Ansatz sollte großartig funktionieren. In großen Apps bei Fb vermeiden wir es, die anzurufen require() für die Szenenkomponente, bis wir sie rendern, was etwas Startzeit sparen kann.

Das renderScene Die Funktion sollte aufgerufen werden, wenn die Szene zum ersten Mal an den Navigator übertragen wird. Es wird auch für die aktive Szene aufgerufen, wenn der Navigator neu gerendert wird. Wenn du siehst renderScene Werde mehrfach angerufen nach a pushdann ist es wohl ein Bug.

Der Navigator ist noch in Arbeit, aber wenn Sie Probleme damit finden, melden Sie sich bitte auf Github und markieren Sie mich! (@ericvicenti)

  • Hallo @Eric, bitte schau dir diesen Link an: – stackoverflow.com/questions/44538306/…

    – sid

    14. Juni 2017 um 10:15 Uhr

Navigator ist jetzt veraltet in RN 0.44.0 Sie können verwenden react-native-deprecated-custom-components stattdessen zur Unterstützung Ihrer vorhandenen Anwendung, die verwendet wird Navigator.

Wie andere bereits erwähnt haben, ist Navigator seit v0.44 veraltet, kann aber immer noch importiert werden, um ältere Anwendungen zu unterstützen:

Navigator wurde aus dem Kernpaket React Native in Version 0.44 entfernt. Das Modul wurde nach a verschoben
reagieren-native-kundenspezifische-komponenten -Paket, das von Ihrer Anwendung importiert werden kann, um die Abwärtskompatibilität aufrechtzuerhalten.

Um die Originaldokumentation für Navigator anzuzeigen, wechseln Sie bitte zu einer älteren Version der Dokumentation.

Gemäß den Dokumenten (React Native v0.54) Navigieren zwischen Bildschirmen. Es wird jetzt empfohlen, es zu verwenden Reagieren Sie auf die Navigation wenn Sie gerade erst anfangen, oder NavigatorIOS für Nicht-Android-Anwendungen

Wenn Sie gerade erst mit der Navigation beginnen, werden Sie wahrscheinlich verwenden wollen Reagieren Sie auf die Navigation. React Navigation bietet eine benutzerfreundliche Navigationslösung mit der Möglichkeit, gängige Stack-Navigations- und Registerkarten-Navigationsmuster sowohl auf iOS als auch auf Android darzustellen.

Wenn Sie nur auf iOS abzielen, sollten Sie vielleicht auch auschecken NavigatorIOS
als eine Möglichkeit, ein natives Erscheinungsbild mit minimaler Konfiguration bereitzustellen, da es einen Wrapper um die native UINavigationController-Klasse bereitstellt.

NB: Zum Zeitpunkt der Bereitstellung dieser Antwort hatte React Native die Version 0.54

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

1282820cookie-checkBenutzerdefinierte Navigation mit der Navigator-Komponente in React-Native

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy