2017-05-25 1 views
1

Ich bin ziemlich neu bei reagieren, reagiere nativ und reagieren Navigation. Fortschritte machen, aber auf dieses Problem einzugehen.Wie verwende ich React Navigation, um zu einem neuen Bildschirm außerhalb der Renderfunktion zu navigieren und JSX nicht zu verwenden?

Normalerweise würde ich zu einer neuen Seite navigieren, indem Sie so etwas wie dies zu tun:

<Button 
    text='View Details' onPress={() => 
    this.props.navigation.navigate('AccountScreen')} /> 

Allerdings bin ich zur Zeit versucht, auf einen neuen Bildschirm in einem .fetch() zu navigieren, und fragen, was ich tun muss anders.

Siehe Code unten:

// AppNavigation.js: 
... 
const PrimaryNav = StackNavigator({ 
    HomeScreen: { screen: HomeScreen }, 
    AccountScreen: { screen: AccountScreen } 
}); 



// HomeScreen.js 
... 
handlePress = (navigator) => { 

    fetch('https://example.com/this/url/works' + this.state.accountName, lookUpObject).then(function(response) { 
    if(response.ok) { 

     // this does not work. 
     // returns this error: 
     // "undefined is not an object (evaluating 'navigator.navigate')" 
     navigator.navigate('AccountScreen', { "accountName": this.state.accountName }); 
    } 
    }) 

} 

render() { 
    const { navigate } = this.props.navigation; 

    reutrn (
    <ButtonCTA onPress={this.handlePress}>Go to account page</ButtonCTA> 
) 
} 

Im Moment bekomme ich folgende Fehlermeldung: "undefined is not an object (evaluating 'navigator.navigate')"

Antwort

2

Sie haben vergessen, nur Navigator passieren in handlePress Ihre Schaltfläche Code sollte wie folgt aussehen:

<ButtonCTA onPress={()=>this.handlePress(this.props.navigation) }>Go to account page</ButtonCTA> 
+0

Hrm ... gut fangen, aber ich bekomme immer noch den gleichen Fehler: 'E ReactNativeJS : {[TypeError: undefined ist kein Objekt (evaluiert 'navigator.navigate')] '. Irgendwelche anderen Gedanken? – chapeljuice

+1

Sie sollten auch die 'function' in ändern' holen ('https://example.com/this/url/works' + this.state.accountName, lookUpObject) .then (function (Antwort) { ' , um die Pfeilsyntax zu verwenden – BTMPL

+0

Okay, ich hatte eigentlich ein paar Dinge, die ich ändern musste, aber ich werde das als die Antwort markieren, da es mich im Grunde genommen dorthin gebracht hat Ich hatte einen Tippfehler in meinem StackNavigator (ugh) und Ich bin in "navigation" statt "navigator" gegangen. Hoffe das hilft jemandem! – chapeljuice

Verwandte Themen