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
Next.jsと状態管理のプラクティス
Search
uhyo
May 14, 2025
Technology
86k
7
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Next.jsと状態管理のプラクティス
2025-05-14 技術選定を突き詰める ~ Online Conference 2025 ~
uhyo
May 14, 2025
More Decks by uhyo
See All by uhyo
型があると何が嬉しいか
uhyo
2
74
Baseline対応のDOMの型定義を作った
uhyo
3
890
AIのReact習熟度を測る
uhyo
2
970
React、まだ楽しくて草
uhyo
7
4.9k
TypeScript 7.0の現在地と備え方
uhyo
6
3.8k
React 19時代のコンポーネント設計ベストプラクティス
uhyo
20
10k
型定義でAIと会話する:型を通じてAIに意図を伝えるテクニック
uhyo
1
110
タグ付きユニオン型を便利に使うテクニックとその注意点
uhyo
3
1.2k
ECMAScript仕様の最新動向: プロセスの変化と仕様のトレンド
uhyo
3
950
Other Decks in Technology
See All in Technology
なぜSRE・セキュリティは評価されないのか?守りの組織を事業成長エンジンに変えた実践
cscengineer
PRO
2
2k
プロダクト思考 × 基盤思考を AIで実現する Compound Engineering
tkc66buzz
1
220
DINO-EdgeQuery:Edge-First Polygon Decoding for Building Footprint Extraction from Satellite Imagery
lehupa
0
130
本番に近いテストをもっと手軽に - Postmanで広がるAPIテストの世界 / Expanding the World of API Testing with Postman
yokawasa
1
240
いま好きなこと 最初はそんなに好きじゃなかった #tamagawadev
nishiuma
1
250
多摩川(.dev)ランニング入門 / Tamagawa.dev#3
fujiwara3
3
310
Guerilla InnerSource in enterprises, during the AI hype
onenashev
PRO
0
140
Genie Code ワークショップ 基礎編 / Genie-Code-Workshop-fundamental
databricksjapan
PRO
0
320
【視聴者参加型!】AWSセキュリティアンチパターンクイズ
syoshie
0
190
少人数データチームのDevin活用実践事例
runandy16
2
420
Nav2、Nav3 ... はたまた自作?〜 作って理解する Nav3 の設計意図 〜 / Nav2, Nav3 ... or Build Your Own? — Understanding Nav3's design intent by building it from scratch
yanzm
0
180
どんな手を使っても絶対間に合わせるスケジューラ
asari194617
0
1.5k
Featured
See All Featured
WCS-LA-2024
lcolladotor
0
820
Marketing to machines
jonoalderson
1
5.7k
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
1
310
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
1
720
The Curse of the Amulet
leimatthew05
2
14k
Jamie Indigo - Trashchat’s Guide to Black Boxes: Technical SEO Tactics for LLMs
techseoconnect
PRO
0
640
More Than Pixels: Becoming A User Experience Designer
marktimemedia
3
510
Ethics towards AI in product and experience design
skipperchong
2
360
The Limits of Empathy - UXLibs8
cassininazir
1
630
How to Get Subject Matter Experts Bought In and Actively Contributing to SEO & PR Initiatives.
livdayseo
0
180
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
68
57k
Transcript
Next.jsと状態管理のプラクティス 2025-05-14 技術選定を突き詰める〜 Online Conference 2025〜
発表者紹介 uhyo 株式会社カオナビ フロントエンドエキスパート 気付いたらReact界隈の中でもかなり Next.js推しの立ち位置になっていた。 2
Next.jsと状態管理 Next.js (App Router) ではサーバーコンポー ネントの活用が可能となり、 フロントエンドの状態管理の考え方も見直しが 求められる。 3
This Talk App Router (というかReact Server Components) にまだ慣れない方を主なターゲットとして、 状態管理をいい感じにやる方法について考えます。 4
これまでの復習 5
ちょっと宣伝 以前の記事で説明したように、 React Server Componentsは 多段階計算として捉えることができる。 6 一言で言うと、React Server Componentsは多段階計算です。
多段階計算 React Server Componentsではアプリが2段階で 描画される。 サーバーコンポーネント ↓ クライアントコンポーネント 7
それぞれの特性 サーバーコンポーネント • サーバー側でキャッシュが効く • クライアントの計算を削減(場合によっては転送量も) • データ取得にネットワークを経由する必要あり 8
それぞれの特性 クライアントコンポーネント • サーバーを介さずに再レンダリング可能 • クライアントでJavaScriptを実行する必要あり 9
サーバーとクライアントの使い分け 土台となる部分にサーバーコンポーネントを使い、 インタラクションが必要な部分にクライアント コンポーネントを使うのが基本。 (アイランドアーキテクチャと同じ考え方) 10 アイランドアーキテクチャはPPRではなく、 RSC(React Server Components)
アーキテクチャと近いしいものと言えます。
RSCでは 従来(非RSC)のReactでステートとして 持っていたデータでも、インタラクションに 影響しないならばサーバーコンポーネントに 担ってもらうことで、 クライアントサイドのステートを削減できる。 11
RSCの考え方 「サーバーが出力したHTML(土台)を JavaScriptでいじる」という昔の世界観が Reactに適合し、進化した形で再来したと 考えるとピンと来る人もいるかも。 12
今回の実例 13
いつものTodoアプリ 要点を押さえて例を出すには便利。 いつもお世話になってます。 あなたならNext.jsで どんな感じに実装しますか? 14
AIさんにやってもらった 「Next.jsの機能をふんだんに使って」と リクエストして実装してもらった結果…… • サーバーコンポーネントでTodoデータ取得 • Todo更新時はrevalidatePathでキャッシュを破棄 →サーバーコンポーネントが再レンダリングされ、 Todo更新が画面に反映 15
問題点① revalidatePathするとサーバーコンポーネント ごとページが再レンダリングされる。 画面の変化はチェックボックス1つだけなのに全て のデータを再受信する必要があり無駄が大きい。 ネットワークの往復も必要。 16
問題点② revalidatePathは変更の影響範囲を パスで管理するのが微妙。 revalidateTagのほうがマシだが、キャッシュ キーの管理もやりたくはない…… 17
アイデア: 差分だけステート管理する コンポーネントのチェック状況だけを クライアントコンポーネントで管理することで、 余計な通信を発生させずに素早くUIに反映できる。 詳しくはこのスライドで(宣伝)→ 18
アイデア: 差分だけステート管理する 実際のコードはこんな感じ 19
アイデア: 差分だけステート管理する 実際のコードはこんな感じ 20 サーバーから来たallTodosと、 ローカルステート checkedState を 組み合わせてfinalTodosを計算
土台という考え方 この考え方では、「サーバーから送られて きたデータ」を土台としている。 その土台の上に、チェックボックスの インタラクションだけをクライアント側で実装。 21
もうひとつの例 22
もうひとつの例 Todoアプリに無限スクロールを実装したい。 必然的にサーバーと通信することにはなるが、 差分だけダウンロードしたいので、 サーバーコンポーネントごと再レンダリングする のは得策ではない。 23
やっぱりステートで差分を管理する 例えば、サーバーから来た最初の1ページを 初期ステートとして使うと簡単に済ませられる。 24
やっぱりステートで差分を管理する 25 サーバーコンポーネントから 来たデータを初期値として 利用
まとめ 26
まとめ このトークでは、Next.jsにおける状態管理の プラクティスの一例として、 サーバーコンポーネントをページの土台として 使う考え方を示した。 これがいつも正解ではないが、Next.js入門しつつ ある程度機能を活かせるやり方としておすすめ。 27