2017-04-20 25 views
1

Ich beginne zu lernen reagieren native und ich sehe einen Fehler, wenn ich versuche, setzen Zustand und nach Satz verwenden, aber nicht funktionieren scheint. Bitte hilf mir oder sag mir, warum es nicht funktioniert.Setzen Sie den Status auf reagieren native

hier ist mein Code:

handlePressDetailsNews(navigator, dataRow){ 
 
    var ob = [{title: 'test'}] 
 
    this.setState({ test: ob}); 
 
    Alert.alert(
 
     'Test Alert', 
 
     'Title '+ this.state.test.title, 
 
    ) 
 
}

Und hier ist Bildschirm, nachdem ich für siehe Alarm auf Titel klicken: https://www.screencast.com/t/rBkiNbgaTpzQ

Dank!

Antwort

2

Rufen Sie Ihre Alert Funktion als einen Rückruf nach dem Festlegen des Status, anstatt nur nach dem Festlegen des Status. Versuchen Sie folgendes:

handlePressDetailsNews(navigator, dataRow){ 
    var ob = {title: 'test'} 
    this.setState({ test: ob},() => { 
     Alert.alert(
      'Test Alert', 
      'Title '+ this.state.test.title, 
     ) 
    }); 
} 

Das Hauptproblem besteht darin, dass Alert.alert() ausgelöst wird, bevor der Zustand aktualisiert beendet hat wird, so durch einen Rückruf verwenden, stellen Sie sicher, dass der Zustand, bevor Sie fortfahren gesetzt wurde.

Beachten Sie auch, dass ich ob von einem Array änderte, das ein Objekt nur ein "normales" Objekt enthält (entfernt die Klammern). Wenn Sie dies aus irgendeinem Grund als Array beibehalten möchten, können Sie mit this.state.test.title nicht auf diesen Wert zugreifen, es müsste this.state.test[0].title lauten. Da der Wert this.state.test das Array [{title: 'test'}] wäre, müssten Sie auf das erste Element im Array zugreifen (mit [0]) und dann den Wert title für dieses Element im Array abrufen.

+0

Hier ist meine Datei: –

+0

Können Sie Post anwser unten sehen und mir helfen? –

+0

Es tut mir leid, dass Ihr Code andere Probleme hatte, aber diese Antwort gilt für das von Ihnen beschriebene Problem. Ich habe andere Personen mit dem SetState/Callback-Problem gesehen. Sie sollten diese Antwort als akzeptiert markieren. – skwidbreth

Verwandte Themen