2016-12-04 4 views
1

Hallo Ich habe versucht, den Zustand zu setzen auf wie diese holen nennen:Kann nicht Zustand eingestellt auf Abruf reagieren nativen

getCats() { 
     fetch(GLOBALS.API + '/specials.php?action=getCats&key=' + GLOBALS.KEY) 
     .then((response) => response.json()) 
     .then((responseJson) => { 
      this.setState = ({ 
       dataSource: "test" 
      }); 
Alert.alert("test"); 

     }) 
     .catch((error) => { 
      console.log(error.toString()); 
     }); 
    } 

    componentDidMount() { 
     this.getCats(); 
     console.log(this.state.dataSource); 
    } 

aber die Zeile:

console.log(this.state.dataSource); 

Rückkehr mich undefined und ich bekomme ein Alarm von "Test"

was das Problem?

tnx viel

+0

Überprüfen Sie meine Antwort –

+0

ich bin froh, dass es für Sie arbeitet. könntest du auch upvote :-) –

Antwort

1

Sie können Callbacks verwenden.

Unten ist der Code Beispiel

getCats(successCallBack, failureCallback) { 
    fetch(GLOBALS.API + '/specials.php?action=getCats&key=' + GLOBALS.KEY) 
     .then(
      function(response) { 
       if (response.status !== 200) { 
        console.log('Looks like there was a problem. Status Code: ' + 
         response.status); 
        failureCallback(); 
       } 
       // Examine the text in the response 
       response.json().then(function(data) { 
        console.log(data) 
        successCallBack(data); 
       }); 
      } 
     ) 
     .catch(function(err) { 
      console.log('Fetch Error :-S', err); 
      failureCallback(); 
     }); 
} 

Unten ist der Code für Erfolg und Misserfolg Rückrufe

successCallBack(data) { 
    console.log(data) 
} 

failureCallback() { 
    alert("failure"); 
} 

Unterhalb der Code ist Erfolg und Misserfolg Rückrufe zu binden .

getCats(this.successCallBack.bind(this), this.failureCallback.bind(this)); 
1

Fetch ist asynchron, so dass es sofort zurück, bevor der Code in der dann Klauseln ausgeführt werden. Daher wurde setState vor der Konsolenprotokollierung nicht ausgeführt.

+0

also wie erstelle ich listview nach dem fetch mit den daten auf dem fetch? – gregory

+0

Wenn Sie den Status ändern, wird die Komponente automatisch neu gerendert. D. h., Wenn die Render-Methode vom Zustand abhängig ist, genügt eine Zustandsänderung, um die Benutzeroberfläche bei einer Zustandsänderung automatisch aktualisieren zu lassen. Eine Methode wäre also ein anfänglich leeres Array als Statusvariable, eine Schleife über diese Variable in der render-Methode (Rendering Ihrer Listview) und die Statusvariable mit Werten aus der http-Anfrage aufzufüllen, was das erneute Rendern mit der aktualisierten Version verursacht Werte. –

Verwandte Themen