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
React.lazyを他コンポーネントに定義した札を下げています
Search
nmemoto
August 31, 2024
65
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
React.lazyを他コンポーネントに定義した札を下げています
nmemoto
August 31, 2024
More Decks by nmemoto
See All by nmemoto
2023年末時点のReduxをざっくり知る
nmemoto
0
580
ChatGPT APIを使ったLINEボットでCloudflare Workersを使う
nmemoto
0
740
Featured
See All Featured
Joys of Absence: A Defence of Solitary Play
codingconduct
1
410
Documentation Writing (for coders)
carmenintech
77
5.4k
Unsuck your backbone
ammeep
672
58k
Leveraging Curiosity to Care for An Aging Population
cassininazir
1
410
Code Review Best Practice
trishagee
74
20k
Why Mistakes Are the Best Teachers: Turning Failure into a Pathway for Growth
auna
0
180
Claude Code のすすめ
schroneko
67
230k
jQuery: Nuts, Bolts and Bling
dougneiner
66
8.5k
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
500
Stewardship and Sustainability of Urban and Community Forests
pwiseman
0
360
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
Designing for Timeless Needs
cassininazir
1
380
Transcript
React.lazyを他コンポーネントに 定義した札を下げています SAPPORO ENGINEER BASE #03 nmemoto
自己紹介 nmemoto 好きな藤井風の曲: 花、まつり、燃えよ
フロントエンドカンファレンス北海道2024ありがとう https://www.frontend-conf.jp/ あの入口の写真とってなかったorz
今日は誰にもツッコまれなかったこの件をお話します https://twitter.com/nmemoto/status/1827146161301729676
前提知識
React Web とネイティブユーザインターフェースのためのライブラリ https://ja.react.dev/ 今日はクライアントサイドの話
React.Suspense >子要素が読み込みを完了するまで フォールバックを表示させることがで きます。 https://ja.react.dev/reference/react/Suspense
React.lazy >コンポーネントのコードの読み込みを、初めてレンダーされるときまで遅延させる https://ja.react.dev/reference/react/lazy#usage lazyコンポーネントと呼 ぶことにします lazyコンポーネントは必 要になったらレンダー開 始
本題
何が起こった 5秒に1回カウントして表示するだけな のに数百回console.logが出力
何が起こった 5秒に1回カウントして表示するだけな のに数百回console.logが出力 lazyコンポーネントを SimpleFailの中に定義 してしまった
こうすると意図通りになった lazyコンポーネントを SimpleFailの外に定義 した
なぜ発生するのか 1. countが1増える 2. SimpleFailコンポーネントの再 レンダリングが発生する 3. LazyComponent再作成 a. 新しいPromise作成
4. Suspense再レンダリング施行 5. SimpleFailコンポーネントのの 再レンダリングが発生する a. 2に戻る 1 2 3 4 5
なぜ発生するのか 1. countが1増える 2. SimpleFailコンポーネントの再 レンダリングが発生する 3. LazyComponent再作成 a. 新しいPromise作成
4. Suspense再レンダリング施行 5. SimpleFailコンポーネントのの 再レンダリングが発生する a. 2に戻る _人人人人人人人人人人_ > 無限ループ発生! <  ̄Y^Y^Y^Y^Y^Y^Y^Y^Y ̄ 1 2 3 4 5
Suspenseの境界を含むコンポーネント全体で 再レンダリング施行が必要な理由 1. countが1増える 2. SimpleFailコンポーネントの再 レンダリングが発生する 3. LazyComponent再作成 a.
新しいPromise作成 4. Suspense再レンダリング施行 5. SimpleFailコンポーネントのの 再レンダリングが発生する a. 2に戻る _人人人人人人人人人人_ > 無限ループ発生! <  ̄Y^Y^Y^Y^Y^Y^Y^Y^Y ̄ Suspenseの内部だけの状態更新で よいのでは? SimpleFailコンポーネント全体の再 レンダリングいらないのでは? 思ってた影響範囲 実際の影響範囲
Suspenseの境界を含むコンポーネント全体で 再レンダリング施行が必要な理由 1. countが1増える 2. SimpleFailコンポーネントの再 レンダリングが発生する 3. LazyComponent再作成 a.
新しいPromise作成 4. Suspense再レンダリング施行 5. SimpleFailコンポーネントのの 再レンダリングが発生する a. 2に戻る _人人人人人人人人人人_ > 無限ループ発生! <  ̄Y^Y^Y^Y^Y^Y^Y^Y^Y ̄ Suspenseの内部だけの状態更新で よいのでは? SimpleFailコンポーネント全体の再 レンダリングいらないのでは? 思ってた影響範囲 実際の影響範囲 Suspenseより上の状態変化が Suspense内 部のコンポーネントに影響を与える可能性が あるため (らしい、ここは自信がないので伸びしろ )
ドキュメントを見ると https://ja.react.dev/reference/react/lazy#troubleshooting
ドキュメントを見ると https://ja.react.dev/reference/react/lazy#troubleshooting
ちゃんと書いてあった \(^o^)/
まとめ • React.lazyはコンポーネントの外部に定義しましょう • Reactのレンダリングプロセス理解したい