Open mziyut opened 1 year ago
Component に渡す key
には利用しないこと。
key list には以下を使う
useId()
で生成される id は Dom がどのように構成されるかで変わる。
CSR, SSR を併用する場合は Dom tree が完全に同一にするようにする
Ref: React v18.0 – React Ref: useId – React
useState
とかと一緒
useId
を生成するために fiber、親 node 情報、位置 を元に生成するが....Incremental hydration Empty nodes inside arrays Long sequences (> 32 bits) Add comments to explain the id generation algorithm In Fiber, find better way to get the number of children in the ...
Incremental hydration Empty nodes inside arrays Long sequences (> 32 bits) Add comments to explain the id generation algorithm In Fiber, find better way to get the number of children in the ...
Incremental hydration Empty nodes inside arrays Long sequences (> 32 bits) Add comments to explain the id generation algorithm In Fiber, find better way to get the number of children in the ...
Incremental hydration Empty nodes inside arrays Long sequences (> 32 bits) Add comments to explain the id generation algorithm In Fiber, find better way to get the number of children in the ...
解説記事無いか探したら出てきたので 解説記事と test コードからどのような処理をするか
https://jser.dev/2023-04-25-how-does-useid-work/
<DivWithId />
が存在するこれは useId()
を callしたときに付与される id を <div id="1" />
のように出力する<div>
<DivWithId>
<DivWithId />
</DivWithId>
</div>
<div>
<div id="0"> // 00
<div id="1" /> // 01
</div>
</div>
<div>
<DivWithId />
<DivWithId />
</div>
<div>
<div id="1" /> // 01
<div id="10" /> // 10
</div>
<div>
<DivWithId>
<DivWithId />
</DivWithId>
<DivWithId />
</div>
<div>
<div id="1"> // 00
<div id="101" /> // 0101
</div>
<div id="10" /> // 10
<div id="11" /> // 11
</div>
のように bit 演算して dom tree から useId()
に使う 数値を生成している
また、 32 bit を超えたとき (overflow) したときは ベースとなる id を残し encode するなど行っている
JSer explains to you useId() works internally, so you can understand it better
A declarative, efficient, and flexible JavaScript library for building user interfaces. - acdlite/react
Incremental hydration Empty nodes inside arrays Long sequences (> 32 bits) Add comments to explain the id generation algorithm In Fiber, find better way to get the number of children in the ...
https://qiita.com/xrxoxcxox/items/2c498537292c6388cb80
facebook/react#22644
https://react.dev/blog/2022/03/29/react-v18#useid
https://jser.dev/2023-04-25-how-does-useid-work/
https://plainenglish.io/blog/the-useid-hook-in-react-18-take-a-look
https://blog.openreplay.com/understanding-the-useid-hook-in-react/