2016-07-24 4 views
2

Abhängig von der aktuellen Route, versuche ich Stile wie folgt zu ändern, bekomme aber einen Fehler: 'Route ist nicht definiert'. Wie kann ich die aktuelle Route referenzieren: route.name in der navigationBar = {}?React Native: Wie referenziere ich die aktuelle Route in Navigator navigationBar = {}?

<Navigator 
configureScene={...} 
initialRoute={...} 
renderScene={...} 
navigationBar={<Navigator.NavigationBar style={route.name == 'Home' ? styles.homeNavBar : styles.normalNavBar} .../>} 
/> 

UPDATE

Hier ist meine aktuelle in index.ios.js einzurichten:

class practice extends Component { 
    constructor(){ 
    super() 
    } 

    renderScene(route, navigator){ 
    return (
     <route.component navigator={navigator} {...route.passProps}/> 
    ) 
    } 

    configureScene(route, routeStack) {...} 

    render() { 
    return (
     <Navigator 
      configureScene={this.configureScene} 
      initialRoute={{name: 'Login', component: Login}} 
      renderScene={(route, navigator) => this.renderScene(route, navigator)} 
      style={styles.container} 
      navigationBar={ 
      <Navigator.NavigationBar 
       style={route.name == 'Home' ? styles.homeNavBar : styles.normalNavBar} //This is what I am trying to achieve 
       routeMapper={NavigationBarRouteMapper} 
      /> 
      } 
     /> 
    ); 
    } 
} 

UPDATE

class practice_style extends Component{ 

    renderScene(route, navigator){ 
    this._navigator = navigator 

    return (
     <route.component navigator={navigator} {...route.passProps}/> 
    ) 
    } 

    configureScene(route, routeStack) {...} 

    getNav =() => { 
    return this._navigator 
    } 

    render() { 
    const routes = this.navigator.getCurrentRoutes(); 
    route = routes[routes.length-1]; 

    return (
     <Navigator 
      configureScene={this.configureScene} 
      initialRoute={{name: 'Home', component: Home}} 
      renderScene={(route, navigator) => this.renderScene(route, navigator)} 
      style={styles.container} 
      navigationBar={ 
      <Navigator.NavigationBar 
       style={route.name == 'Home' ? styles.homeNavBar : styles.normalNavBar} 
       routeMapper={NavigationBarRouteMapper} 
      /> 
      } 
     /> 
     ) 
    } 
} 

Antwort

0

Sie Referenz von Navigator wie folgt gesetzt werden kann

Die obige Funktion gibt ein Array von Routen zurück, das letzte Element in diesem Array ist Ihre aktuelle Route.

Hoffe, dass hilft.

+0

Sorry, aber zu versuchen, herauszufinden, wie man es an der Arbeit. Wie integriere ich es in das, was ich erreichen möchte? Vielen Dank! –

+0

ok, aktualisierte Antwort. Lassen Sie mich wissen, ob dies für Sie funktioniert. – Abhishek

+0

Schätzen Sie die schnelle Antwort! Ich habe ein UPDATE im ursprünglichen Post gemacht. Bitte schau es dir an. Also versuche ich 'route.name' zu ​​erhalten, wenn es neu gerendert wird und basierend auf' route.name' unterschiedliche Styles für navigationBar = {} zeige, also entweder styles.homeNav oder styles.normalNavBar. In Bezug auf die Frage, wo sollte ich die 'const routes = this.navigator.getCurrentRoutes(); route = routen [routes.length-1]; 'und wie hilft' ref', das zu erreichen, was ich vorhabe? Danke Abhishek! –

6

Es ist ein Array, nur den letzten aus dem Stapel.

var currentRoute = navigator.getCurrentRoutes().pop(); 

Navigator.getCurrentRoutes Klone die Routen-Array, so dass Sie nicht durch pop zerstören kann ‚etwas von ihm weg ing.

0

Ich benutze navigator.jumpTo(), um durch Routen zu gehen, also navigator.getCurrentRoutes() gab die letzte meiner verfügbaren Routen zurück, anstatt die aktuelle Route.

die aktuelle Route zu erhalten, habe ich navigator.navigationContext.currentRoute

Verwandte Themen