2017-05-19 14 views
1

Ich benutze die Slick React Navigation und befolge die nested navigation recipe hier, aber ich weiß nicht, wie ich 'this' an meine Navigation weitergeben soll. Entschuldigung für meine Ignoranz.React Native: Requisiten an verschachtelte Navigation übergeben

Hier ist mein allgemeine Struktur Umriss:

class MyApp extends Component { 
    render() { 
    return (
     <StackNavigation 
     screenProps={this.state} 
     /> 
    ) 
    } 
} 

const MainScreenNavigator = TabNavigator(
    { 
    Awesome: { screen: Awesome } // How do I pass this.state? 
    } 
) 

const routesConfig = { 
    Home: { screen: MainScreenNavigator }, 
    Profile: { screen: Profile } 
} 

const StackNavigation = StackNavigator(routesConfig, {initialRouteName: 'Home'}) 

So wie gehe ich this.state meinen MainScreenNavigator?

Antwort

1

nicht sicher, ob Sie den Zustand übergeben können wie er ist. Doch die params Sie übergeben können wie folgt mit dem nächsten Bildschirm zugegriffen werden .. können Sie versuchen, diese

this.props.navigation.state.params.<<property passes>> 
4

Nach this, können Sie eine zusätzliche Option zum StackNavigator im StackNavigatorConfig passieren. Etwas wie folgt aus:

const StackNavigation = StackNavigator(routesConfig, StackNavigatorConfig)

... wo die StackNavigatorConfig ein Objekt wie ist:

{ initialRouteName: 'Home', initialRouteParams: {...this.state} }

Und das ist gonna alle Zustand passieren zum Anfangsroute von Ihr Navigator.

Für andere Route können Sie tun:

this.props.navigation.navigate('SomeScreen', {<the-greatest-object-for-pass-down>})

Und das ist Gonna Pass the-größte-Objekt-für-Pass-down zu SomeScreen.

Schließlich können Sie auf diese Parameter für sowohl (die erste und alle anderen Bildschirm) mit this.props.navigation.params zugreifen.

+0

Ich denke, mein Punkt ist, dass 'const StackNavigation' außerhalb der App-Komponente deklariert wird, also hat es keinen Kontext von' this' und 'this' ist nicht verfügbar. – AlxVallejo

+0

Sie haben recht, merke ich bis jetzt. Aber ... Was genau willst du tun? Und warum 'screenProps' Ihr Problem nicht löst? –

+0

Also * das * funktioniert * für das anfängliche Rendern, aber ich habe festgestellt, dass wenn diese Requisiten modifiziert werden (z. B. durch Ändern des Status der Root-Komponente), der untergeordnete Bildschirm nicht neu gerendert wird. Gibt es irgendwie, um den Navigator zu zwingen, seine Requisiten zu aktualisieren? –

Verwandte Themen