2017-09-19 3 views
0

ライフサイクルメソッドは非同期であると私は理解しています。 renderを実行する前に解決するために、私はアクションの発送をcomponentWillMountにしたい。リアクションライフサイクルの約束は、その後のライフサイクルメソッドを一時停止する方法ですか?

あなたはrenderで物事を制御するために待機するsetStateを使用して、あなたのReduxのアクションのための約束を使用している非同期動作を制御する1つの方法:

componentWillMount() { 
    this.props.myDispatchedAction().then(() => { 
    this.setState({loaded: true}) 
    }) 
} 

render() { 
    return (
    <div> 
     { this.state.loaded ? <div>waited for promise</div> : null } 
    </div> 
) 
} 

をしかし、それは単なる事実だ場合の約束が使用されていること( renderが停止した場合は、これをasync/awaitと同じ方法で同期することができますか?

async componentWillMount() { 
    await this.props.myDispatchedAction() 
} 
+0

ここで、非同期のどこのメソッドを理解していますか?私はそれのためのドキュメントを見つけることができませんでした –

+0

@DayanMorenoLeon私は非常に簡単に間違っている可能性があります。ライフサイクルイベントが同期している場合、私の非同期/待機の例が機能することを意味しますか? – Andrew

+0

笑、私は好奇心を持っているので、私は本当に尋ねていた。 –

答えて

0

これは同期的に見えますが、async/awaitは基本的にプロミスの構文砂糖です。このように、それはまだ非同期なので、機能は変わるべきではありません。

+0

「機能は変えてはいけない」という意味をもう少し詳しく説明できますか? .then + this.setStateと比較して機能を参照していますか、サンプルコードでasync/awaitを使用しても、コンポーネントのレンダリングには何の影響もありません。 – Andrew

+0

私は間違っているかもしれませんが、私が意味するのは、_async/await_を使うことによって、あなたは 'componentWillMount()'の実行を "停止"しないということです。あなたのケースでは、私が言ったことのために2つのバージョンの間に違いがあります( 'render()'はPromiseがまだ保留中に呼び出されるでしょう)。 –

関連する問題