2017-05-29 11 views
1

Ich habe eine Funktion, die ich ausführen muss, nachdem ich den Zustand von etwas eingestellt habe. Ich verwende setStates Callback-Funktion wie so es zu nennen:setState Callback löst nicht nach Zustandsänderung aus

setState({ 
    myState:myState 
},secondFunction()) 

secondFunction =() => { 
    console.log(this.state.myState); 
} 

Wenn meine Callback-Funktion die Klammern hat: () die Konsole einloggen undefiniert oder nichts, aber wenn ich die Klammern aus dem Anruf zu entfernen zurück wie so scheint es, Arbeit:

setState({ 
    myState:myState 
},secondFunction) 

ich bin neu zu reagieren so, wenn jemand mir erklären könnte, warum die eckigen Klammern, in dem in der Reihenfolge ein anderes macht, ist die Funktion aufgerufen, die sehr hilfreich sein würde!

Antwort

3

Der Grund hierfür ist, möchten Sie ein function einmal aufgerufen werden setState vervollständigt es Aufgabe, bedeutet dies eine Funktion, erwarten aber, wenn Sie verwendet () bedeutet, dass Sie nicht ein function, sind vorbei Sie eine function anrufen.

Andere Möglichkeiten der gleichen Sache zu schreiben ist:

setState({ 
    myState:myState 
},() => secondFunction()) 

setState({ 
    myState:myState 
}, function(){ secondFunction() }) 

Unterschied zwischen second und second():

secondFunction wird eine Funktion Körper zurückkehren aber secondFunction() kehrt das Ergebnis dieser Funktion.

prüfen diese Schnipsel:

function abc(){ 
 
    return 'Hello' 
 
} 
 

 
console.log("body", abc); 
 

 
console.log("result", abc());

+0

alle klar Dank! –

1

setState erwartet eine Funktion als Rückruf.

Wenn Sie die Klammer () hinzufügen, rufen Sie die Funktion secondFunction auf und übergeben, was auch immer es als zweites Argument an setState zurückgibt. Ihre Funktion gibt nichts zurück, daher die undefined oder nothing.

Was Sie tun möchten, ist die Funktion selbst übergeben (so kann es später aufgerufen werden), die ohne die Klammern erfolgt.

Verwandte Themen