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
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
nmemoto
August 31, 2024
66
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
750
Featured
See All Featured
Google's AI Overviews - The New Search
badams
0
1.1k
Why You Should Never Use an ORM
jnunemaker
PRO
61
10k
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
290
The Anti-SEO Checklist Checklist. Pubcon Cyber Week
ryanjones
0
210
SEOcharity - Dark patterns in SEO and UX: How to avoid them and build a more ethical web
sarafernandez
0
240
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
2.3k
End of SEO as We Know It (SMX Advanced Version)
ipullrank
3
4.4k
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
1
340
Designing Dashboards & Data Visualisations in Web Apps
destraynor
232
55k
Making Projects Easy
brettharned
120
6.7k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.5k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
230
23k
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のレンダリングプロセス理解したい