やかんです。
reactを心底理解したくなったので、リポジトリを読んでいこうと思います。
reactのディレクトリ構成
ルートのディレクトリ構成は、以下の通り。
- /.codesandbox
- /.github
- /compiler
- /fixtures
- /packages
- /scripts
- .editorconfig
- .eslintignore
- .islintrc.js
- .git-blame-ignore-revs
- .gitattributes
- .gitignore
- .mailmap
- .nvmrc
- .prettierignore
- .prettierrc.js
- .watchmanconfig
- CHANGELOG-canary.md
- CHANGELOG.md
- CODE_OF_CONDUCT.md
- CONTRIBUTING.md
- LICENSE
- MAINTAINERS
- README.md
- ReactVersions.js
- SECURITY.md
- bable.config.js
- dangerfile.js
- netlify.toml
- package.json
- react.code-workspace
- yarn.lock
GPTくん曰く、packagesディレクトリから読み始めるのがおすすめだそうです。従います。
packagesディレクトリには何があるのか。
- dom-event-testing-library
- eslint-plugin-react-hooks
- internal-test-utils
- jest-react
- react-art
- react-cache
- react-client
- react-debug-tools
- react-devtools-core
- react-devtools-extensions
- react-devtools-fusebox
- react-devtools-inline
- react-devtools-shared
- react-devtools-shell
- react-devtools-timeline
- react-devtools
- react-dom-bindings
- react-dom
- react-js
- react-markup
- react-native-renderer
- react-noop-renderer
- react-reconciler
- react-refresh
- react-server-dom-esm
- react-server-dom-fb
- react-server-dom-parcel
- react-server-dom-turbopack
- react-server-dom-webpack
- react-server
- react-suspense-test-utils
- react-test-renderer
- react
- scheduler
- shared
- use-subscription
- use-sync-external-store
めっっちゃありますね。メモとして、まず読みたいやつを太字にしてみました。
- react-dom
- react-js
- react-server
- react
この4つですね。
現状、reactについてもっと理解したいこと(現状の理解を添えて)。
refとは何か。
- reactは直接にdomを操作しない思想で作られている。「直接にdomを操作しない」というのは、要するに関心の分離だと理解している。
- これが、有名な仮想domという考え方。発想としては、「仮想domというものをreactで作る!ブラウザは、これを元にdomを構築してくれるはずだ!と、信じることにする!」みたいな発想だろう。
- reactは、仮想domを使って、ブラウザにおけるUIがどうあるべきかを記述する。
- 仮想domがメモリ的に重かったら、ブラウザが描画するためのdomツリーと合わせて本来必要なdomの情報量の2倍を保持する必要が出てきてしまう。
- だから、domはこの点を解消するために、独自のデータ構造を持って、軽量なものとして存在している。
- reactは、「状態が更新されたらUIを更新する」という戦略をとっている。
- その際、有名な「差分のみの更新」が実行される。
仮想DOMについて
gptによれば、
function App() {
return <div>Hello, React!</div>;
}
というコードからは、
{
type: 'div',
props: {
children: 'Hello, React!'
}
}
という仮想domが生成されるらしい。
このような仮想domを元に実際のdomを生成する過程は、レンダラーが担っている。その際、レンダラーはブラウザが提供するAPIを通じて、ブラウザの描画にアプローチする。
レンダラーとして代表的なものは、react-dom。
今日のところは、終了!最後までお読みいただき、ありがとうございます。