2016-07-07 92 views
1

如何在調用setState之後強制在R​​eact中進行狀態更新?React:如何強制setState後發生狀態更改

據我所知,下次調用render的時候狀態會有效更新。此外,forceUpdate()應該重新渲染組件並立即更新狀態更改,對吧?然而,這似乎並非如此。這是一個例子。

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 
} 

如何確保在調用consumeData之前實際更新狀態?

回答

5

setState()是異步的,所以你可以做到這一點的回調:

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

這被認爲是安全的,好的做法,或可將其導致看不見的副作用嗎? –

+1

這是安全的,AFAIK。但它可能不是最佳做法,因爲建議使用應用程序級別狀態(使用redux)。因此,您可能可以避免將'consumeData'作爲父項的通道傳遞。 – zvona