2025年1月8日
Reactでのレンダーとコミット
- Reactで書いたコンポーネントは画面に表示する前に、Reactによっとレンダーされる必要がある。
- Reactで書いたコンポーネントを表示する3つのステップ
- ステップ 1: レンダーのトリガ
- 1.コンポーネントの初回のレンダー
- React単体においては特定のターゲットとなるDOMに対してcreateRootを用いてrenderメソッドをコンポーネントメソッドをコンポーネントを呼び出す。
- 2.コンポーネント(または親コンポーネント)のstateの更新によるレンダー
- useStateの返り値のset関数を用いてレンダーをトリガーすることができる
- set関数を実行すると自動的にレンダーがキューイングに入る(多分React Schedulerと定義されているあたりの話)
- ステップ 2 : React がコンポーネントをレンダー
- レンダーとはReactがコンポーネントを呼び出すことを指す
- レンダー初回時にReactはrootコンポーネントを呼び出す
- 次回以降のレンダーはstateの更新によってトリガーされた関数コンポーネントをReactが呼び出す。Reactは前回のレンダーからどこが変わったのか、変わらなかったのかを計算する。コミットフェーズまでこの情報は使われない。
- 上記のプロセスは再起的に発生して、コンポーネントがなくなり、表示されるべき内容を知り尽くすまで行われる
- ステップ 3 : React が DOM への変更をコミットする
- コンポーネントをレンダーしたあと、ReactはDOMを変更する
- 初回レンダー時にはappendChild DOM APIを利用して、作成したDOMノードを画面に表示する
- 再レンダー時にはレンダー中に計算された必要最小限のDOM変更をする(レンダー間で違いがあった場合にのみDOM ノードを変更する)
- レンダー結果が前回と同一である場合、React は DOM を触らない
- ReactがDOMを更新したら、ブラウザを再描画する。その再描画するプロセスは「ブラウザレンダリング」として知られている。Reactの公式ドキュメントでは混乱を避けるために、「ペイント」という呼び方に変えている。
参照
レンダーとコミット