2017-07-04 8 views
2

私は最近、ReactとReactDOMコードベースの大部分を読んで、setStateの呼び出しが発生したときに何が起こるのかを理解しました。この時点で、私は高いレベルで事象のシーケンスを理解していると言います。 setStateを呼び出すと、処理が必要な更新のキューにメッセージが追加されます。更新は処理され、必要に応じてDOMへの変更が行われます。setState(React)を非同期にするコードはどこにありますか?

ここで私は迷っています。 setStateの非同期動作については数百のブログ記事があります。 setStateが非同期であることは疑いありませんが、私はReactDOMコードベースで非同期動作を導入するコード行を見つけることができません。誰がこれが起こるか正確に知っていますか?

+0

上で同期場合は、http://reactkungfu.com/2016/03/dive-into-react-codebase-handling-state-changes/ – aabilio

答えて

-3

私はsetStateは非同期ではないと思いますが、複数のsetState呼び出しの最適化があり、場合によっては同期キャノットが保証されます。

+0

をお読みください保証されることはありませんそれは間違いなく非同期です。 –

1

最初にsetStateが非同期で実行される可能性がありますが、そのように実行されるわけではありません。ベンNadelはsetStatesonClickハンドラのように、元のイベントをインターセプトすることができます反応する状況でバッチ処理されますように思わ要約するとsetState() State Mutation Operation May Be Synchronous In ReactJS

の彼の調査結果の一部を示しています。反応は、より実際のDOMを作成するので、仮想DOM(そして属性の意味を知っているので)すべて、それはあなたが非同期動作を取得この場合、この

wrappedHandler =() => { 
    turnBatchingOn() 
    originalHanlder() 
    executeBatched() 
} 

のようなものに提供onClickハンドラのいずれかをラップすることができますが反応しますsetStateの呼び出しはエンキューされ、元のonClickハンドラの実行が終了した後にのみ実行されます。

これは実際のリアクションコードではありませんが、非同期効果がどのように達成されたかは私の推測です。私はそれが実際のコード行ではないことを理解していますが、それを見つけるのに役立つと思います。私が見つけたSETSTATE実装を説明する

ベスト記事はReact Kung Fu

関連する問題