2016-07-07 12 views
1

Wie erzwingen, die Statusaktualisierung in React nach dem Aufruf von SetState stattfinden?React: Wie erzwingt Statusänderungen nach setState

Soweit ich weiß, Status wird effektiv aktualisiert, wenn Render das nächste Mal aufgerufen wird. Außerdem sollte forceUpdate() die Komponente erneut rendern und die Zustandsänderungen sofort aktualisieren, oder? Dies scheint jedoch nicht der Fall zu sein. Hier ist ein Beispiel.

handleSomeEvent(data) { 
    this.setState({ 
     data: data 
    }) 
    this.forceUpdate() 

    // At this point state should be updated but it isn't 
    this.props.consumeData(this.state.data) // consumeData will receive old data 
} 

Wie stelle ich sicher Zustand, bevor sie tatsächlich aktualisiert wird consumeData Aufruf?

Antwort

5

setState() ist asynchron, so können Sie es in den Rückruf tun:

handleSomeEvent(data) { 
    this.setState({ 
    data: data 
    },() => this.props.consumeData(this.state.data)); // using `data` would work as well... 
} 
+0

Ist dies als sicher, gute Praxis, oder kann es ungesehen Nebenwirkungen verursachen? –

+1

Es ist sicher, AFAIK. Aber es ist möglicherweise nicht die beste Vorgehensweise, da der App-Level-Status empfohlen wird (mit Redux). Daher könnten Sie wahrscheinlich vermeiden, 'consumeData' als Prop von Parent zu übergeben. – zvona

Verwandte Themen