1

Ich versuche, einen Ladebildschirm in React Native zu erstellen, die zu einem Bestätigungsbildschirm navigieren wird, sobald die Zeit von einer SetTimeout-Funktion erfüllt wurde. Momentan wird der Bildschirm geladen, navigiert jedoch nicht zum Bestätigungsbildschirm nach dem setTimeout-Intervall.Navigieren zu einer anderen Komponente mit setTimeout wird nicht ausgeführt

import React from 'react'; 
import { Text, View, Image } from 'react-native'; 
import { Actions as NavigationActions } from 'react-native-router- 
flux'; 

import styles from './styles'; 

export default class ProcessingLoader extends React.Component { 
    constructor(props) { 
    super(props); 
    this.state = {}; 
} 



componentDidMount() { 
    setTimeout(this.navigateToConfirmation, 3000); 
    } 



navigateToConfirmation() { 
    NavigationActions.checkoutConfirmation({ product: this.props.product, type: 'reset' }); 
    } 



renderLoader() { 
    return (
     <View style={styles.textContainer}> 
     <Text style={styles.loaderText}>Processing Order ...</Text> 
     </View> 
    ); 
    } 



render() { 

    return (
     <View style={{ flex: 1 }}> 
     {this.renderLoader()} 
     </View> 
    ); 
    } 
} 

Ich habe versucht, SetTimeout in ComponentDidMount sowie in Render. Ich habe auch versucht, und pfeil funktion vs nicht mit einer pfeil funktion. Setze ich setTimeout hier komplett falsch? Ich habe Angst, dass ich nicht verstehe, warum es nicht nach 3 Sekunden zum nächsten Bildschirm navigiert. Danke im Voraus!

+1

immer Sollte mit dem 'this' Stichwort vorsichtig sein in Javascript ... Kontexte sind [seltsam] (https://stackoverflow.com/questions/3127429/how-does-the-this-keyword-work), siehe [das Problem] (https: //developer.mozilla .org/de-DE/docs/Web/API/WindowOrWorkerGlobalScope/setTimeout # The_this_problem) in 'setTimeout()' MDN (beachten Sie, dass der Abschnitt die @ Chris Antwort unten behandelt) –

+0

Danke, @PatrickBarr! –

Antwort

0

Sie rufen die Funktion nicht auf, verwenden Sie Klammern, um das zu tun. Auch ist der erste Parameter ein Rückruf so setzen Sie Ihre Invokation in einer Funktion, wie folgt aus:

componentDidMount() { 
    setTimeout(function(t){t.navigateToConfirmation()}, 3000, this); 
} 

oder in einer Pfeilfunktion:

componentDidMount() { 
    setTimeout(() => {this.navigateToConfirmation()}, 3000); 
} 
+1

Danke, @Chris! –

Verwandte Themen