2016-07-07 13 views
1

setStateを呼び出した後にReactで強制的に状態の更新を行う方法はありますか?React:setStateの後に状態の変更を強制する方法

私が知る限り、状態はレンダーが次に呼び出されるときに効果的に更新されます。また、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。しかし、アプリレベルの状態が推奨されているので、それはベストプラクティスではないかもしれません。したがって、恐らく親からの小道具として 'consumeData'を渡すのを避けることができます。 – zvona

関連する問題