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
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
nmemoto
August 31, 2024
83
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
770
Featured
See All Featured
Optimising Largest Contentful Paint
csswizardry
37
4k
A Soul's Torment
seathinner
8
3.8k
Gemini Prompt Engineering: Practical Techniques for Tangible AI Outcomes
mfonobong
2
590
What does AI have to do with Human Rights?
axbom
PRO
1
2.5k
Being A Developer After 40
akosma
PRO
92
590k
Why Our Code Smells
bkeepers
PRO
340
58k
Bridging the Design Gap: How Collaborative Modelling removes blockers to flow between stakeholders and teams @FastFlow conf
baasie
0
740
Technical Leadership for Architectural Decision Making
baasie
3
610
Intergalactic Javascript Robots from Outer Space
tanoku
273
28k
Designing for Performance
lara
612
70k
Raft: Consensus for Rubyists
vanstee
142
7.8k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
16k
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のレンダリングプロセス理解したい