なぜReactは2回レンダリングするのか?

投稿日:2023/06/13 最終更新日:2023/06/13

なぜReactは2回レンダリングするのか?

Reactは仮想DOM(Virtual DOM)という仕組みを使用して、効率的なUIのレンダリングを実現しています。

Reactがコンポーネントをレンダリングする際には、一見すると2回のレンダリングが行われるように見えることがあります。

この記事では、Reactの2回のレンダリングの仕組みとその目的について詳しく解説します。

初回のレンダリング

Reactのコンポーネントが初めてレンダリングされるとき、Reactは仮想DOMを使用してコンポーネントのUIを構築します。

この初回のレンダリングでは、コンポーネントのpropsやstateの値に基づいてUIを描画します。

2回目のレンダリング

2回目のレンダリングは、初回のレンダリング後に行われます。

Reactは初回のレンダリングで生成された仮想DOMと、現在の仮想DOMを比較します。

この比較により、コンポーネントの状態やプロパティの変更を検出し、実際のDOMに必要な変更のみを適用します。

レンダリングの仕組み

Reactの2回のレンダリングの仕組みは以下の手順で行われます。

  • 初回のレンダリング時に、コンポーネントの仮想DOMが構築されます。
  • 2回目のレンダリング時に、前回の仮想DOMと現在の仮想DOMを比較し、変更のある部分を特定します。
  • 変更のある部分のみを実際のDOMに反映します。
    これにより、余分なDOM操作を最小限に抑え、パフォーマンスを向上させます。

npm run devではstateの値をconsole.logで出力すると2回値が表示されることがあります。

これは上記の仕組みを使用しているものであり、オススメはしませんがStrict Modeを解除すると1回の表示のみにすることが可能です。

レンダリングの目的

Reactが2回のレンダリングを行う理由は、以下のような目的があります。

  • レンダリングの効率化: 2回のレンダリングにより、必要なDOMの変更のみを行うことで、パフォーマンスを向上させます。
  • 正確な変更検出: 2回目のレンダリングでの比較により、正確に変更が検出されます。これにより、不要な再レンダリングを回避し、UIの一貫性を確保します。
  • 不正な変数の変更を検出: 破壊的メソッドを使用した場合は仮想DOMと実在DOMとの間に不一致が出ることがあります。その場合はReactの仮想DOMを用いたレンダリングが正しく動作しない場合があるためエラーを出力するようになっています。

まとめ

Reactの2回のレンダリングは、仮想DOMと変更の検出に基づいた効率的なUIの更新手法です。

初回のレンダリングではUIが構築され、2回目のレンダリングでは変更のある部分のみが更新されます。

この仕組みにより、Reactは高速なUIの描画と一貫性のある更新を実現しています。

参考資料

state:コンポーネントのメモリ

React公式ドキュメント: Reactの仮想DOM

Reactのレンダリング仕組みを理解する


人気記事ランキング