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
7
7.3k
Next.jsと状態管理のプラクティス
2025-05-14 技術選定を突き詰める ~ Online Conference 2025 ~
uhyo
May 14, 2025
Tweet
Share
More Decks by uhyo
See All by uhyo
libsyncrpcってなに?
uhyo
0
540
10ヶ月かけてstyled-components v4からv5にアップデートした話
uhyo
5
610
更新系と状態
uhyo
8
3.5k
React 19アップデートのために必要なこと
uhyo
8
2.5k
color-scheme: light dark; を完全に理解する
uhyo
8
680
React 19 + Jotaiを試して気づいた注意点
uhyo
9
3.5k
TypeScriptの次なる大進化なるか!? 条件型を返り値とする関数の型推論
uhyo
3
3.3k
tsconfig.jsonの最近の新機能 ファイルパス編
uhyo
8
4.5k
非同期処理を活用しながらRust製wasmとJSを連携する方法(wasm-bindgenを使いたくない人向け)
uhyo
4
4.6k
Other Decks in Technology
See All in Technology
Vision Language Modelと自動運転AIの最前線_20250730
yuyamaguchi
3
1.1k
AWS re:Inforce 2025 re:Cap Update Pickup & AWS Control Tower の運用における考慮ポイント
htan
1
170
KubeCon + CloudNativeCon Japan 2025 Recap
donkomura
0
110
Microsoft Clarityでインサイトを見つけよう
nakasho
0
120
Claude Codeが働くAI中心の業務システム構築の挑戦―AIエージェント中心の働き方を目指して
os1ma
9
1.5k
増え続ける脆弱性に立ち向かう: 事前対策と優先度づけによる 持続可能な脆弱性管理 / Confronting the Rise of Vulnerabilities: Sustainable Management Through Proactive Measures and Prioritization
nttcom
1
240
Perlアプリケーションで トレースを実装するまでの 工夫と苦労話
masayoshi
1
380
製造業の課題解決に向けた機械学習の活用と、製造業特化LLM開発への挑戦
knt44kw
0
140
Findy Freelance 利用シーン別AI活用例
ness
0
170
AI エンジニアの立場からみた、AI コーディング時代の開発の品質向上の取り組みと妄想
soh9834
8
640
SAE J1939シミュレーション環境構築
daikiokazaki
1
210
経理出身PdMがAIプロダクト開発を_ハンズオンで学んだ話.pdf
shunsukenarita
1
290
Featured
See All Featured
Why Our Code Smells
bkeepers
PRO
337
57k
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
667
120k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
126
53k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
26
3k
The Language of Interfaces
destraynor
158
25k
Embracing the Ebb and Flow
colly
86
4.8k
How STYLIGHT went responsive
nonsquared
100
5.7k
Imperfection Machines: The Place of Print at Facebook
scottboms
267
13k
Bootstrapping a Software Product
garrettdimon
PRO
307
110k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
3.9k
Automating Front-end Workflow
addyosmani
1370
200k
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