Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
React.lazyを他コンポーネントに定義した札を下げています
Search
nmemoto
August 31, 2024
70
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
590
ChatGPT APIを使ったLINEボットでCloudflare Workersを使う
nmemoto
0
760
Featured
See All Featured
Building Flexible Design Systems
yeseniaperezcruz
330
41k
Why Your Marketing Sucks and What You Can Do About It - Sophie Logan
marketingsoph
0
420
The Power of CSS Pseudo Elements
geoffreycrofte
82
6.6k
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
68
58k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.6k
The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs
inesmontani
PRO
3
3.7k
How to train your dragon (web standard)
notwaldorf
97
6.8k
How to Grow Your eCommerce with AI & Automation
katarinadahlin
PRO
2
290
Learning to Love Humans: Emotional Interface Design
aarron
275
41k
RailsConf 2023
tenderlove
30
1.6k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1.3k
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のレンダリングプロセス理解したい