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
Designing for Performance
lara
611
70k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
23k
A Modern Web Designer's Workflow
chriscoyier
698
190k
Primal Persuasion: How to Engage the Brain for Learning That Lasts
tmiket
0
380
Amusing Abliteration
ianozsvald
1
210
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.3k
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
1
2.1k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.8k
DevOps and Value Stream Thinking: Enabling flow, efficiency and business value
helenjbeal
1
250
Testing 201, or: Great Expectations
jmmastey
46
8.2k
Google's AI Overviews - The New Search
badams
0
1k
Are puppies a ranking factor?
jonoalderson
1
3.6k
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のレンダリングプロセス理解したい