2023/8/11 react-deep-diveをやる
これを参考にやってみる
packages/の内部は作者が用意した諸々の軽量実装
react
react-dom
render
hydrate
react-reconciler
scheduler
Counter App
$ yarn
$ diaenv allow
run
$ npm run start
継続的にbuild
$ npm run dev -- -w
Reactの再実装
はじめに.md
必要な知識の整理.md
古いReactの実装だ
要素が変わった場合はツリー全てを作り直す
属性だけが変わった場合は属性のみを書き換える
諸々実装が終わった後に再度訪問してリンク先とか読みたいmrsekut.icon
実装をはじめる前に.md
$ npx create-toy-react-app 2021 template <my-app>
npm run build
node v18だとエラーになったのでv16にした
npm run start
諸々実装が終わった後に再度訪問してリンク先とか読みたいmrsekut.icon
ts化しようかと思ったけどだるすぎたので断念
お〜、renderingできた
でもまだcreatReact.createElement使ってないな
差分検出処理を実装する.md
現状の実装の問題点
ある要素を操作する度に DOM に新しいノードを追加している点
不完全なUIが表示される可能性がある
不完全なUIが表示されないように、まるごとDOMツリーを反映する
それをcommitRootでしてる
全てのタスクが終わった段階でcommitRootする
DOM の更新・削除
elementと、前回のfiber treeの比較
DOMへのcommitが終わったら
fiber treeeへの参照を、currentRootに保存しておく
fiberのalternative property
前回のcommitのfiber treeの参照?
fiber.effectTagにaction名のようなものを保持させる
UPDATE | PLACEMENT | DELETION
これごとにcommitWorkで実際の処理を行う
SSGを実装する.md
SSRを実装する.md
SSR・SSGの実装をはじめる前に.md
おわりに.md
カウンターが動くようにする.md
SSR
$ npx create-toy-react-app 2023 ssr-template <your-ssr-app>
SSG
$ npx create-toy-react-app 2023 ssg-template <your-ssg-app>
hydration
関連
RSCの再実装