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_2023
Search
kbaba1001
February 10, 2023
Technology
210
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
76
Build React system with ClojureScript (Squint)
kbaba1001
0
190
talk-with-local-llm-with-web-streams-api
kbaba1001
0
540
Lume: Static Site Generator
kbaba1001
0
720
Word Penne
kbaba1001
0
250
I live by using a minor language
kbaba1001
1
220
fast optical line
kbaba1001
0
420
ArtPosePro and Procreate
kbaba1001
1
260
How did Clojure change my life
kbaba1001
3
2k
Other Decks in Technology
See All in Technology
Claude Code並行開発環境の ムダ‧ムラ‧ムリを見直した話
muranakaaa
0
350
カメラ×AIで挑む「ホワイト物流」― 車両管理、自動化の壁と突破口【SORACOM Discovery 2026】
soracom
PRO
0
180
ウォーターフォール開発案件のPMとしてAI活用を模索している話
hatahata021
2
230
LangfuseによるLLMOps基盤の構築と活用事例
zozotech
PRO
1
200
なぜ、あなたのAPIは使われないのか? AX時代の設計原則、ガードレール、運用体制
yokawasa
1
270
データと地図で読む 大井町の「かわるもの、かわらないもの」
yoshiyama_hana
0
820
AI時代の強いチームの作り方
yuukiyo
17
9k
なぜ、あなたのエージェントは言うことを聞かないのか
segavvy
1
590
Escolhendo LLMs na Prática: Lições Reais em Busca Agêntica no Mercado Livre —TDC 2026 Floripa
jpbonson
0
110
数値で見る Microsoft MVP 〜Spec Kit と GitHub Copilot Agent で作るデータ可視化ダッシュボード〜
yutakaosada
0
180
エンタープライズデータへ安全につなぐ Production-ready なエージェント設計 ― AI × MCP リファレンスアーキテクチャ ― #AIDevDay
cdataj
1
370
データベース研修【MIXI 26新卒技術研修】
mixi_engineers
PRO
1
720
Featured
See All Featured
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
287
14k
Building an army of robots
kneath
306
46k
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
0
560
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
Odyssey Design
rkendrick25
PRO
2
740
Visualization
eitanlees
152
17k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
940
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
62
45k
Discover your Explorer Soul
emna__ayadi
2
1.2k
Reality Check: Gamification 10 Years Later
codingconduct
0
2.2k
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
118
120k
Exploring anti-patterns in Rails
aemeredith
3
450
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 を理解していればほとんどわかったようなもの