Upgrade to Pro — share decks privately, control downloads, hide ads and more …

極小Reactで描画を理解しながら追う

Avatar for iWonder118 iWonder118
September 11, 2026
71

 極小Reactで描画を理解しながら追う

Avatar for iWonder118

iWonder118

September 11, 2026

More Decks by iWonder118

Transcript

  1. これをやろうと思った背景 作るものの仕様 - TypeScriptで1ファイルかつ、 100行ほど - JSXから最終的に DOM操作で画面が更新されるまで (CSR) -

    HooksはuseStateのみ - Fiberを簡略化 - 双方向リンクノードでなく、配列にて保持かつ、一気に描画処理 - className・onClickのみ対応 - 常にルートから全コンポーネントを再描画する
  2. React の描画をおさらい JSXから描画されるまで - Trigger - 初回レンダリングまたは、setter(useState)からイベント発火 - Render -

    コンポーネントをjsxからReactElementへの変換 - ReactElementからReactFiberへの変換 - Commit - ReactFiberから実際のDOM操作
  3. 各セクションのお話 Triggerフェーズ - 初回描画 - createRootのrender()をから描画処理が始まる - rootノードをrenderをする関数(createFiberFromElement)に渡す - 再描画

    - Hooksのsetterで変化があった場合に描画処理が始まる - 今回はuseStateだけなのでset〇〇 - React本体であればcreateWorkInProgress関数
  4. 各セクションのお話 Renderフェーズ - 初回描画 - 受け取ったjsxをランタイムで評価してReactElementに変換 - ReactElementをReactFiberに変換する - 上記的に再帰的に繰り返す

    - 再描画 - 受け取ったjsxをランタイムで評価してReactElementに変換 - ReactElementをReactFiberに変換する - 変換後のReactFiberを元に差分比較をする
  5. 各セクションのお話 Commitフェーズ - 初回描画 - 作成したReactFiberを元にDOM操作をして描画をする - Commit後に差分比較用にReactFiberを保存する - 再描画

    - 差分比較で出た差分をDOM操作をして再描画する - 差分のないDOMはそのまま利用する - Commit後に差分比較用にReactFiberを保存する