Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
10 min ReactDOM Codebase Overview
Search
ryota-murakami
February 01, 2018
3
1.9k
10 min ReactDOM Codebase Overview
React.js meetup #5 2018/02/01(木) の発表資料です。
ryota-murakami
February 01, 2018
Tweet
Share
Featured
See All Featured
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
136
33k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
53k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
10
770
Side Projects
sachag
453
42k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
32
5.4k
Visualization
eitanlees
146
16k
A Modern Web Designer's Workflow
chriscoyier
693
190k
Done Done
chrislema
184
16k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
5
540
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.6k
Documentation Writing (for coders)
carmenintech
69
4.7k
Building Better People: How to give real-time feedback that sticks.
wjessup
367
19k
Transcript
10 min ReactDOM Codebase Overview Ryota Murakami (@malloc007) React.js meetup
#5 2018/02/01
ɾUnemployed but currently accepting React Native Job ɾFavorite JavaScript Programming,
Open Source ɾDon’t have a CS degree !
ɾEspecially fascinating React core team programming practice
None
Motivation
*XBOUUPQBSUJDJQBUFJOUIF3FBDU0441SPKFDU CVUJEPO`UVOEFSTUBOE3FBDU*NQMDPEFBUBMM
4PVSDF$PEF3FBEJOH!
Introduction
React = Monorepo Codebase
Contain some packages, so
Today Topics ɾReact Top-Level API ɾReactDOM ɾEspecially client-side first rendering
React Top-Level API
React Top-Level API
packages/react/package.json
packages/react/index.js
packages/react/src/React.js ~~
We can import & using
Next…
ReactDOM
ReactDOM
packages/react-dom/index.js
packages/react-dom/src/client/ReactDOM.js
huge codebase
Fundamental Knowledge
https://www.codecademy.com/articles/react-virtual-dom
onece Node.appendChild() call Calculate finally content on Virtual DOM
onece Node.appendChild() call Calculate finally content on Virtual DOM
https://reactjs.org/blog/2015/12/18/react-components-elements-and-instances.html functional component Component React Elements
https://reactjs.org/blog/2015/12/18/react-components-elements-and-instances.html functional component Component React Elements React has Elements as
a internal presentation
https://reactjs.org/blog/2015/12/18/react-components-elements-and-instances.html functional component Component React Elements In order to Virtual
DOM calculation
https://reactjs.org/blog/2015/12/18/react-components-elements-and-instances.html functional component Component React Elements Reconciler calculate state change
etc…
Really simplified ReactDOM overview
ɾpackages/react-dom ɾpackages/react-reconciler Related Packages
ɾpackages/react-dom ɾpackages/react-reconciler named React Fiber Related Packages
None
UpdateQueue Scheduler CommitWork Reconciler ReactDOM
UpdateQueue Scheduler CommitWork Reconciler ReactDOM Rendering Actual DOM
packages/react-dom/src/client/ReactDOM.js ReactDOM.render() definition
Trace callstack initial rendering
ReactDOM.render() ReactDOM.legacyRenderSubtreeIntoContainer()
ReactDOM.legacyRenderSubtreeIntoContainer()
root?
ReactRoot
ReactDOM.legacyRenderSubtreeIntoContainer() ReactRoot.render()
ReactRoot.render()
DOMRenderer?
DOMRenderer = ReactFiberReconciler
DOMRenderer.updateContainer() = ReactFiberReconciler.updateContainer()
ReactFiberReconciler.updateContainer() ReactFiberReconciler.updateContainerAtExpirationTime()
ReactFiberReconciler.updateContainerAtExpirationTime() ReactFiberReconciler.insertUpdateIntoFiber()
ReactFiberReconciler.insertUpdateIntoFiber() createUpdateQueue()
Scheduler CommitWork Reconciler ReactDOM UpdateQueue
ReactFiberReconciler.updateContainerAtExpirationTime() ReactFiberScheduler.scheduleWork()
CommitWork Reconciler UpdateQueue ReactDOM Scheduler
ReactFiberScheduler.scheduleWork() ReactFiberScheduler.scheduleWorkImpl() ReactFiberScheduler.requestWork() ReactFiberScheduler.performWorkOnRoot() ReactFiberScheduler.completeRoot() ReactFiberScheduler.commitRoot() ReactFiberScheduler.performWork() ReactFiberScheduler.commitAllHostEffects()
ReactFiberScheduler.commitAllHostEffects() ReactFiberCommitWork.commitPlacement()
Reconciler UpdateQueue Scheduler ReactDOM CommitWork
ReactFiberCommitWork.commitPlacement() appendChild()
appendChild Implementation packages/react-dom/src/client/ReactDOM.js
We got Actual DOM
but React goes on! thanks