2015-03-29 15 views
120

ich Möglichkeiten React Native erkunde, während eine Demo-Anwendung mit benutzerdefinierter Navigation zwischen den Ansichten mit Hilfe von Navigator Komponente Entwicklung - http://facebook.github.io/react-native/docs/navigator.html#contentReact-Native - Individuelle Navigation mit Navigator Komponente

Die wichtigste app Klasse macht Navigator und innerhalb renderScene kehrt bestanden Komponente:

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 }); 
        } 
       }} 
      /> 
     ); 
    } 
} 

Vorerst enthält ca. 2 Aufrufe:

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 will, ist -

  • ich in Protokollen sehen, dass, wenn die Taste „gehen zu füttern“ renderScene mehrfach aufgerufen wird, obwohl die Ansicht einmal korrekt macht. Funktioniert die Animation?

    index.ios.js:57 Object {name: 'WelcomeView', component: function} 
    index.ios.js:57 Object {name: 'FeedView', component: function} 
    // renders Feed View 
    
  • Im Allgemeinen hat mein Ansatz die Art und Weise reagieren entspricht, oder es kann besser gemacht werden?

Was ich erreichen will, ist etwas ähnliches wie NavigatorIOS aber ohne Navigationsleiste (jedoch einige Ansichten werden ihre eigene benutzerdefinierte Navigationsleiste haben).

+1

@ericvikenti dieses Beispiel sollte auf der [Navigator-Seite] (https: //facebook.github .io/react-native/docs/navigator.html # Inhalt) in den Dokumenten. Es ist vollständiger und gibt ein besseres Bild davon, wie die Navigator-Komponente im Kontext verwendet wird. – greatwitenorth

+0

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

Antwort

54

Ihr Ansatz sollte gut funktionieren. In großen Apps bei Fb vermeiden wir den Aufruf der require() für die Szenenkomponente, bis wir sie rendern, was ein bisschen Start-up-Zeit sparen kann.

Die Funktion renderScene sollte aufgerufen werden, wenn die Szene zum ersten Mal in den Navigator geschoben wird. Es wird auch für die aktive Szene aufgerufen, wenn der Navigator erneut gerendert wird. Wenn Sie sehen, renderScene mehrmals nach einem push aufgerufen werden, dann ist es wahrscheinlich ein Fehler.

Der Navigator ist immer noch in Arbeit, aber wenn Sie irgendwelche Probleme damit finden, bitte Datei auf GitHub und tag mich! (@ericvicenti)

+0

Hallo @Eric bitte schau auf diesen Link: - https://StackOverflow.com/Questions/44538306/Navigate-Benutzer-to-New-Screen-On-Listitem-Click-React-Native – sid

2

Navigator ist veraltet in RN 0.44.0 Sie react-native-deprecated-custom-components stattdessen verwenden können, um Ihre bestehende Anwendung zu unterstützen, die Navigator verwendet.

0

Die Navigatorkomponente 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

Verwandte Themen