タイトルはそれをすべて言います。なぜcomponentDidMount
DOMアクセスが必要なものに適しているのか理解していますが、AJAXリクエストは必ずしもまたは通常は必要ありません。
何ができますか?
タイトルはそれをすべて言います。なぜcomponentDidMount
DOMアクセスが必要なものに適しているのか理解していますが、AJAXリクエストは必ずしもまたは通常は必要ありません。
何ができますか?
回答:
componentDidMount
副作用のためです。イベントリスナーの追加、AJAX、DOMの変更など
componentWillMount
めったに役に立ちません。特にサーバー側のレンダリングに注意する場合(イベントリスナーを追加すると、エラーやリークが発生し、その他の多くの問題が発生する可能性があります)。
componentWillMount
コンストラクタと同じ目的を果たすため、クラスコンポーネントからの削除についての話があります。createClass
コンポーネントに残ります。
componentWillMount
ます。区別はあまりわかりません。
componentWillMount
がサーバーサイドレンダーで実行されることがわかります。Wherasを使用している場合はcomponentDidMount
、クライアント側でのみ実行されます。結果として、componentWillMount
外部の相互作用を実行したり、イベントなどにバインドしたりすることは、素晴らしいアイデアではありません。サーバーサイドでコンポーネントをレンダリングする計画がない場合でも、コードの移植性を高めるだけの理由ではありません。これは、@ daniulaの回答で説明されている主な理由の外にあります。
私も最初は同じ問題を抱えていました。でお願いしてみることにしましたcomponentWillMount
が、結局色んな小さな問題になってしまいます。
ajax呼び出しが新しいデータで終了したときにレンダリングをトリガーしていました。ある時点で、コンポーネントのレンダリングにサーバーからの応答を取得するよりも時間がかかりました。この時点で、ajaxコールバックが、マウントされていないコンポーネントでレンダリングをトリガーしていました。これは一種のエッジケースですが、おそらくもっと多いので、に固執する方が安全componentDidMount
です。
componentWillMount
は引き続き使用する必要がありcomponentDidMount
ます。
setState
コンポーネントコンストラクターを呼び出さないでください。AJAX呼び出しがいつ完了するかを判断する方法がありません。twitter.com/dan_abramov/status/576453138598723585
ドキュメントによると、状態をに設定してcomponentWillMount
も、再レンダリングはトリガーされません。AJAX呼び出しがブロックされておらずPromise
、成功時にコンポーネントの状態を更新するを返す場合、コンポーネントがレンダリングされると応答が到着する可能性があります。componentWillMount
あなたが要求したデータを用いてレンダリングコンポーネントされている、あなたが期待する動作を持っていません。再レンダリングトリガーされません。
フラックスライブラリのいずれかを使用し、要求されたデータが最終的にストアに格納される場合、コンポーネントは接続されています(または接続されたコンポーネントから継承します)。そのデータの受信はおそらくプロップを変更するため、これは問題になりません。最終的に。
componentWillMount
最初のレンダリングの前に新しい状態が定義されているからといって、再レンダリングはトリガーされません。ただしsetState
、AJAXコールバックで呼び出された場合、最初のレンダリングの後に確実に呼び出され、再レンダリングがトリガーされます。
componentWillMount
、コンポーネントをマウントしなかった場合、その要素にアクセスしようとすると失敗するからです。