Open aloerina01 opened 5 years ago
renderRoot
の呼び出し元たどっためも
intaractiveUpdates -> performWork -> perfoemWorkOnRoot -> renderRoot
retryTimedOutBoundary -> scheduleWork -> requestWork -> perfoemWorkOnRoot -> renderRoot
captureCommitPhaseError -> scheduleWork -> requestWork -> perfoemWorkOnRoot -> renderRoot
昨日の続き。
FiberSchedulerによってbeginWork -> completeWork -> commitWork が実行されることところまでは読み解いた。
react/ReactFiberBeginWork.js at master · facebook/react
updateFunctionComponent
を呼び出しているWIPのhookをつくるとき、ReactFiberHooks.jsスコープの変数に対して存在チェックを掛けてなければcreate&setしてて、なんかキモチワルイ。個人的にはこうだと自然に感じる。
でもHookのソースって、Fiber系ロジックのような「Fiberインスタンスを引数で受けて、それに対して操作する」感じのロジックではないんだよなー。なのでこの案はどこかに破綻があるのかもしれない。
renderWIthHookの中で
currentlyRenderingFiber = workInProgress
とかしてるし。 雰囲気で見るに、beginWork -> completeWorkの実行過程ではFiberHook.jsスコープの変数にworkInProgresssのものが格納され続けて、それをresolveCurrentlyRenderingFiber
とかで参照しながらHook処理を行っていく感じなんだと思う。漠然とHookインスタンスがComponentのプロパティとして生えてるようなのをイメージしてたせいで理解に苦しんだけど、そういうことではないんだね。
なので以前 https://github.com/aloerina01/til/issues/79 でやったようなHook用のstateやsetterを生やすのは間違い(この答え合わせをしたかったのにえらく時間かかったわ…)