2017-10-26 11 views
0

Ich habe einen Handler, der bei Änderung im Eingabefeld ausgelöst wird. Wie auch immer, wenn ich den Status auf der Konsole protokolliere resData ist 'undefiniert'? Das ist unmöglich, da console.log (body) Ergebnisse liefert.Reaktionsstatus undefiniert nach setState?

handlePersonNameChange(event) { 
var resData 
request('https://swapi.co/api/people/?search='+event.target.value, function (error,response,body) { 
    console.log(body) 
    resData = body 
}) 
this.setState({personData: resData}); 
console.log(this.state) 
} 
+0

Sie sollten den Status innerhalb des Request Callbacks festlegen. Außerdem ist das Setzen des Status in React asynchron, so dass Sie in der nächsten Zeile 'setState()' und dann 'console.log (this.state)' nicht setzen können und erwarten, dass der Status aktualisiert wird. – Jayce444

+0

In diesem Fall erhalte ich TypeError: this.setState ist keine Funktion – elvezet13

Antwort

1

Sie müssen setState innerhalb der Anfrage Rückruf, zum Beispiel:

request('https://swapi.co/api/people/?search='+event.target.value, function (error,response,body) { 
    console.log(body) 
    resData = body 
    this.setState({personData: resData}); 
}) 

weil Ihre Anfrage wurde nicht resovled wenn Sie setState in Ihrem Beispiel zu tun.

+0

In diesem Fall erhalte ich TypeError: this.setState ist keine Funktion. – elvezet13

+1

Das liegt daran, dass Ihr Rückruf nicht gebunden ist. Sie können eine Pfeilfunktion verwenden (wenn Sie ES6-Unterstützung haben) (error, response, body) => {this.setState ({personData: body})} –

1

Ein Anforderungsaufruf ist asynchrone, Sie sollten die this.setState in den Antworttext einfügen.

Auch this.setState ist asynchrone, um das Ergebnis zu sehen, sollten Sie die Callback-Funktion verwenden. Diese Funktion wird aufgerufen, nachdem der neue Status festgelegt wurde.

handlePersonNameChange(event) { 
    var resData 
    request('https://swapi.co/api/people/?search='+event.target.value, 
    function (error,response,body) { 
    console.log(body) 
    resData = body 
    this.setState({personData: resData}, function() { 
     console.log(this.state) 
    }) 
    }) 
} 

Mehr Infos über this.setState() können here

0
this.setState({ state : "new1" }) 

Diese Methode ist nicht synchron zu finden ist so, wenn Sie den Zustand protokollieren es noch nicht aktualisiert wird.

Sie sollten es in der Lebenszyklusmethode componentWillUpdate protokollieren.

Verwandte Themen