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 19時代のコンポーネント設計ベストプラクティス
Search
uhyo
February 18, 2026
Technology
10k
20
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
React 19時代のコンポーネント設計ベストプラクティス
2026-02-18 React 19、コンポーネント設計どう変わった?〜うひょさんに聞く最新 実務Tips〜
uhyo
February 18, 2026
More Decks by uhyo
See All by uhyo
型があると何が嬉しいか
uhyo
2
63
Baseline対応のDOMの型定義を作った
uhyo
3
860
AIのReact習熟度を測る
uhyo
2
930
React、まだ楽しくて草
uhyo
7
4.8k
TypeScript 7.0の現在地と備え方
uhyo
6
3.7k
型定義でAIと会話する:型を通じてAIに意図を伝えるテクニック
uhyo
1
110
タグ付きユニオン型を便利に使うテクニックとその注意点
uhyo
3
1.1k
ECMAScript仕様の最新動向: プロセスの変化と仕様のトレンド
uhyo
3
940
TypeScript 6.0で非推奨化されるオプションたち
uhyo
18
8.5k
Other Decks in Technology
See All in Technology
老害フォレンジッカーはAI羊の夢を見るか?
tadmaddad
0
350
Goでデータパイプラインを作ろう
sansantech
PRO
1
510
カートの信頼性を担保するWireMockを使ったe2eテスト
ykagano
0
540
Genie Codeハンズオン基礎編
taka_aki
1
130
現場回帰したデータエンジニアが考える AI 時代のキャリア開発 / Career Development in the Age of AI Perspectives from a Hands-on Data Engineer
medley
0
120
SO-101×VLAによる3色キューブのピック&プレース
abeja
0
220
2026-08-15 JAWS-UG 茨城 #16 Secrets ManagerにおけるSecret値の管理(Terraformの場合) / Secrets Manager Secrets
masasuzu
0
300
QAエンジニア起点で進める、SmartHRにおける信頼性向上について
kaomi_wombat
1
150
AIコーディングの次。コードレビューと理解負荷を解消して組織の開発生産性を高める
moongift
PRO
2
2.7k
LLM Internals: 언어 모델의 계보와 알고리즘 진화 (2023~2026)
inureyes
PRO
0
710
Kiro Crew入門 - 常駐エージェントの仕組みと使いどころ / Intro to Kiro Crew
k_adachi_01
1
490
35分でわかるEffective Platform Engineering
nwiizo
5
410
Featured
See All Featured
Why Our Code Smells
bkeepers
PRO
340
58k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
62k
世界の人気アプリ100個を分析して見えたペイウォール設計の心得
akihiro_kokubo
PRO
73
41k
The SEO Collaboration Effect
kristinabergwall1
1
520
The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs
inesmontani
PRO
3
3.7k
A designer walks into a library…
pauljervisheath
211
24k
Leveraging Curiosity to Care for An Aging Population
cassininazir
1
470
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
420
Utilizing Notion as your number one productivity tool
mfonobong
4
550
Navigating Team Friction
lara
192
16k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
123
22k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.5k
Transcript
React 19時代のコンポーネント 設計ベストプラクティス 2026-02-18 React 19、コンポーネント設計どう変わった?〜うひょさんに聞く最新 実務Tips〜
発表者紹介 uhyo 株式会社カオナビ フロントエンドエキスパート 最近はReact向けのOSSを 開発するのが趣味。 2
本日のテーマ React 19がリリースされてもう1年以上。 現在のReactベストプラクティスは何なのか? 最新のReact事情はどうなっているのか? できる限りお伝えします。 3
導入 — なぜReactを使うのか
なぜReactを使うのか •フロントエンドのデファクトだから? •得意だから? •宣言的UIだから? 5
なぜReactを使うのか どんなライブラリでも、使うにあたって 明確な目的意識があるのが望ましい。 ひとつは、宣言的UI。 6
なぜReactを使うのか でも、宣言的UIライブラリも色々ある。 7
なぜReactを使うのか Reactに顕著な特徴は、 より良いUXのための、 高度に最適化されたスケジューリングにある。 (実DOM直結ではなく仮想DOMなのも、単なる歴史的経緯では なくそれを活かした機構になっている) 8
Async Reactとは
Async Reactとは React Conf 2025で、React開発メンバーによって Async Reactという講演が行われた。 10 ↓おすすめ記事紹介 https://www.youtube.com/watch?v=B_2E96URooA
Async Reactとは 非同期処理があることを前提にアプリケーション を実装し、最適なUXを目指す考え方。 React 19にはすでに、Async ReactのためのAPIが いくつも存在している。 11
例 ボタンを押したら、API呼び出しが返ってくる まで画面が変化しない…… useOptimisticによる楽観的更新でUX向上! 12
例 ページネーションで、次のページに移動したときに Suspenseフォールバックが一瞬見えてしまう…… トランジションで読み込み中の表示を改善して ちらつきを防止! 13
例 画面が切り替わったときに色々な要素が移動して、 何がどう変わったのか分かりにくい…… ViewTransitionで適切なアニメーションを入れる ことで分かりやすさを向上! (まだ安定版には含まれていません) 14
Async Reactの現状 このように、Async Resultの考え方を取り入れた 優れたUXを実現するためのAPIはすでに結構ある。 ReactチームはAsync Reactワーキンググループ を立ち上げ、Async Resultの普及を目指す。 15
Async Reactの普及 ①エコシステムのライブラリにAsync React対応 を組み込む 自慢: 自作ルーティングライブラリ FUNSTACK Routerにはトランジション を組み込みAsync
React対応しました! 16
Async Reactの普及 ② Async Reactの概念の教育・普及を促進する 今やってるこのトークも、Async Reactの普及に 貢献したいという意図を込めてやっています。 17
要するに…… 18
React 19時代のベストプラクティス Async Reactの考え方を取り入れること がベストプラクティスである といっても過言ではない。 19
React 19時代のベストプラクティス Async React用のAPIをただ使うだけではない。 汎用化し、個別の対応をせずとも 最適化されたUXを提供できること がゴールとなる。 20
具体例 21
最初の一歩: 全てをトランジションにする React 18でトランジション(useTransition)が 導入されたときから、 一部の例外を除き、全てのステート更新は トランジションであることが望ましい というのがReactチームの考えである。 22
最初の一歩: 全てをトランジションにする // 普通のステート更新はトランジションではない setFoo(123); // オプトインしてトランジションにする startTransition(() => {
setFoo(123); }); 23
トランジションの汎用化 しかし、全てのステート更新にstartTransitionを 付けて回るのは面倒くさい。汎用化すべき。 方法としては…… ①ステート管理ライブラリに組み込む ②汎用コンポーネントに組み込む ←今日はこれを紹介 24
汎用ボタンコンポーネント 従来のコンポーネント: const MyButton: FC<ButtonProps> = ({ onClick, children })
=> <button className=“…” onClick={onClick}> {children} </button>; 25
汎用ボタンコンポーネント トランジション組み込み済のコンポーネント: const MyButton: FC<ButtonProps> = ({ action, children })
=> <button className=“…” onClick={(event) => { startTransition(() => { action(event); }); }}> {children} </button>; 26
汎用ボタンコンポーネント 汎用ボタンコンポーネントにトランジションを 組み込むことで、そのボタンを介するステート 更新は自動的にトランジションになる。 これがAsync Result流! 27
汎用ボタンコンポーネント isPendingを使うのもおしゃれ。コンポーネントの責務を しっかり切りつつアプリ全体と調和するUXになる。 const [isPending, startTransition] = useTransition(); return (<button
className={…} onClick={(event) => { startTransition(() => { action(event); }); }}> {children} </button>); 28
どのように設計すべきか 29
Suspenseはもはや前提条件 Async Reactという以上、非同期処理を Reactランタイムが知らないといけない。 そのための基礎であるSuspenseは、 もはや全ての前提であり必須。 30
Suspenseはもはや前提条件 SuspenseはSuspenseバウンダリを作る。 つまり、Suspenseの中と外を区切る役目を持つ。 アプリケーション内にどのようにSuspenseを配置し、 境界を引くのか考えることがアプリケーション設計に おいて重要。 31
Suspenseはオプトアウトの手段でもある トランジションのデフォルトの挙動をオプトアウト することも、 Suspenseバウンダリの配置の仕方によって可能と なる。 これに詳しく載っています(宣伝)→ 32
トランジションを意味づける useOptimisticやuseActionStateといったAPIを 使いこなすためには、トランジションの設計が重要。 「このトランジションは何を意味していて、いつから いつまで続くのか」を設計する。 33
つまり……宣言的UI Async Reactの理想は、トランジションの「意味」を プログラマーが考えて、具体的な挙動はReactが よしなにやってくれること。 これって、宣言的UIでは? 34
まとめ 35
まとめ Reactは宣言的UIのライブラリだから、 宣言的UIの考え方で使いましょう。 Async Reactにより、従来よりも広い範囲で 宣言的UIの考え方を適用できるようになった。 React本体と、エコシステムが向いている方向 に合わせていきたい。 36