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_2023
Search
kbaba1001
February 10, 2023
Technology
220
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
React_2023
kbaba1001
February 10, 2023
More Decks by kbaba1001
See All by kbaba1001
How to build a video conferencing system that no one has ever told you about
kbaba1001
0
84
Build React system with ClojureScript (Squint)
kbaba1001
0
210
talk-with-local-llm-with-web-streams-api
kbaba1001
0
560
Lume: Static Site Generator
kbaba1001
0
740
Word Penne
kbaba1001
0
260
I live by using a minor language
kbaba1001
1
230
fast optical line
kbaba1001
0
430
ArtPosePro and Procreate
kbaba1001
1
270
How did Clojure change my life
kbaba1001
3
2k
Other Decks in Technology
See All in Technology
Code4Lib JAPANカンファレンス2026 開会挨拶 / Code4Lib JAPAN Conference 2026: Opening Remarks
ykiyota
0
340
Reactの設計論
uhyo
14
8.1k
module Synths; end
asonas
1
130
Omarchy Quattro の日本語設定周り
simosako
2
140
日経電子版を支えていく Kasane Design System/fec_fukuoka
nikkei_engineer_recruiting
0
860
例外の正しい扱い方 そのエラー try-catchして大丈夫?
jinwatanabe
3
470
目の前の楽しいが人生を変える - コミュニティの螺旋の歩き方と楽しむコツ / change your life
soudai
PRO
4
440
AI時代だからこそ、スケールしないことをやろう
yutashigemura
1
140
HRC_Frontend_Conference_Fukuoka_2026.pdf
ts020
0
490
WAF 運用改善の承認サイクル/SRE_BizReach_MIXI_1
visional_engineering_and_design
2
450
コスト最適化の「めんどくさい」を AWS FinOps Agent でチョット楽にする
classmethod_kaz
0
320
『止めない』を設計する — 制約の中で、事業の根幹を支える判断
hiroyaterui
0
270
Featured
See All Featured
AI: The stuff that nobody shows you
jnunemaker
PRO
9
990
Leveraging Curiosity to Care for An Aging Population
cassininazir
1
490
Mind Mapping
helmedeiros
1
350
[RailsConf 2023] Rails as a piece of cake
palkan
59
7k
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
3
880
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
540
Data-driven link building: lessons from a $708K investment (BrightonSEO talk)
szymonslowik
1
1.3k
Site-Speed That Sticks
csswizardry
13
1.5k
SEO for Brand Visibility & Recognition
aleyda
0
4.7k
The Illustrated Children's Guide to Kubernetes
chrisshort
51
53k
We Are The Robots
honzajavorek
0
360
RailsConf 2023
tenderlove
30
1.5k
Transcript
React 2023 2023/02/10 馬場一樹
状態管理
Reactとは • JavaScript で UI を作るためのライブラリ • Svelte/Vue/Angular などもあるけど一番よく使われているのが React
•
React登場前のUI開発: jQueryの時代 • jQuery は UI を作るための部品集 • HTMLのDOM編集するため状態が HTML
にある • 大規模な UI を JS で記述するには不向き ◦ 逆に LandingPage みたいなやつなら jQuery でも良いと思う
ReactはUIの状態をJSで管理することができる 例えば、モーダルが開いているか閉じているかを知りたいとき、 • jQueryの場合はモーダルのDOMがあるかどうかを確かめる • Reactの場合はJSの変数でモーダルの状態を管理する
React の状態管理の方法 • React Hook ◦ useState / useEffect /
useContext など ◦ Reactに備わっている機能 • Redux ◦ デファクトスタンダードだったライブラリ ◦ React Hook 以前からある ◦ いわゆる「単一方向データフロー」 ▪ GitHub - facebook/flux: Application Architecture for Building User Interfaces • Recoil / jotai ◦ 最近よく聞く
React における状態 • 個々のComponent内部の細かい状態の管理 ◦ modalの開閉状態の管理など ◦ useState, useReducer などを使う
• グローバルな状態の管理 ◦ サインインユーザーの情報など ◦ useContext, Redux, Recoil, jotai などを使う
globalな状態管理 • サインイン情報などシステム全体で使いたい状態 • useState でこれをやると各コンポーネントに引数でstateを渡していく必要がある (いわゆるバケツリレー) • useContext を使うとバケツリレーする必要がなくなる
useContextの欠点 ReactDOM.createRoot(document.getElementById("root")).render( <React.StrictMode> <ThemeContext.Provider> <UserContext.Provider> <RouterProvider router={router} /> </UserContext.Provider> </ThemeContext.Provider>
</React.StrictMode> ); 複数のContextを定義するとネストが深くな り管理が煩雑になる。
useContext の代替手段 • Recoil, jotai など • preact, solid.js における
signal も似たような使い方ができる
Reduxは何者なのか? • Recoil, jotai と同じようにグローバルな状態の管理ができる • 単一方向データフローによりAPIからデータを取得する (Query) や、 Form
による Create/Update のデータをサーバーに反映する (Mutation) も管理できる だったら Redux を使えば一番良いのか? • レンダリングが増えてパフォーマンスが悪くなる可能性がある • 単一方向データフローは初心者には理解が難しく、またほとんど何もしないコード が増えていく傾向にある • Tanstack query や SWR などキャッシュをうまいことやってくれるライブラリが出て きた
最近のはやり? • コンポーネント内部の細かい状態管理 ◦ useState, useReducer • global な状態管理 ◦
Recoil, jotai • API通信周り ◦ Tanstack query, SWR, など • Form の状態管理 ◦ React hook form, 素のHTML5 validation, など ◦ 【React】フォームは状態管理せずに実装できるよ - Qiita ◦
Reactの状態管理の歴史について • Reactにおける状態管理の動向を追ってみた
フレームワーク
React の代表的なフレームワーク • Next.js • Remix • Routes や SSR
(Server side rendering) などがやりやすい • 状態の管理は前述の通り複雑なので組み込まれていない ◦ ただし SWR は Next.js と同じチームが作っている •
フレームワーク登場以前のReact • SPA が多い • 設計者の力量によってはスパゲッティコードになる • 統一された企画がないのでプロジェクトに参画しづらい •
Next.js • Vercel が作っている • Vercel で動かすことを前提とした機能がいくつかある ◦ あるいはVPS や
CloudRun などのサーバーで動かす ◦ 実質 SSR か静的HTML出力の2択になるので Firebase などの他のホスティングサービスで Next.js を動かすのはちょっと怖い ◦ 静的HTML出力の場合かなり機能が制限される • パフォーマンスのために機能が複雑になりがち
Remix • React Router の作者が作ってる • Spotify に買収された • React
Router v6 を使いつつ効率的に SSR できる • サーバーサイドも実装可能 ◦ 1つのjsxファイル中にサーバー側のコード (Loader) とクライアント側のコードを書ける ◦ ちなみに deno の fresh も似たような感じ •
自分としてはフレームワークがあまりすきになれない • フレームワークは色々な事情を考慮して作るので自分のユースケースで考えたとき 過剰になる場合が多い • そのフレームワークの流儀に従う必要がある • Next.js にいたってはサーバー環境まで束縛されている感じが強い ◦
ベンダー依存がなんとなく不安
個人的に注目しているもの: preact-cli • preact のフレームワーク • preact の公式が作っている • SPA,
SSR, pre-rendering ができる • 癖が少なくてちょうどいい感じ • preact ◦ react 互換だが 3kb という小ささ ◦ 100%の互換性をうたっており、 React 製のライブラリが使える ◦ className を class と書くことができる等、後発ゆえの細かい改善が色々ある ◦ signal, createContext など React にはない機能もある ▪ この機能で Recoil / jotai などが不要になる
その他
新機能: Suspense • Component ごとに SSR できる機能 • Component を遅延ロードすることでページの表示を高速化する
• 詳しくは ◦ Suspenseはどのような機能なのか| ReactのSuspense対応非同期処理を手書きするハンズオン
Reactの学習ロードパス • SPA を作ってみる ◦ Tutorial v6.8.1 | React Router
◦ React Router の Tutorial が丁寧な Hands-on なのでこれをやる ◦ Vite, React Router について学べる • 上記に API 通信機能を組み込む ◦ オープンなAPIを使って機能を作ってみる ▪ Cataas … 猫の画像をランダムに返してくれる API ▪ News API … 世界中のニュースをまとめている API ◦ fetch や axios などを使って通信する ◦ React Router の loader で通信する or Tanstack Query や SWR を使ってみる • Remix をやってみる ◦ React Router v6 を理解していればほとんどわかったようなもの