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
80
Build React system with ClojureScript (Squint)
kbaba1001
0
200
talk-with-local-llm-with-web-streams-api
kbaba1001
0
550
Lume: Static Site Generator
kbaba1001
0
730
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
270
How did Clojure change my life
kbaba1001
3
2k
Other Decks in Technology
See All in Technology
Point Cloud as a Foreign Language for Multi-modal Large Language Model
takmin
0
300
Distributed Transactions Under Fire: Building a Zero-Oversell Flash Sale Platform with Amazon Aurora DSQL
yama3133
1
110
dbt と Snowflake と tag
kevinrobot34
2
290
顧客の要望は2次情報である 〜アンテナを張るFDEの構造論〜
noriakioji
5
1k
Kiro Crew で始める マルチエージェント開発
miu_crescent
PRO
0
200
Claude Codeの体系的な理解と知識のフック
oikon48
8
6k
現場の暗黙知を継承するAIエージェント — 対話から生まれる長期記憶と Skills
atsukish
0
130
PdMをやめて、 "プロダクトビルダー"という 働き方に変えました / PdM to Product Builder
shikichee
0
120
AWSとAzureのマルチクラウド活用における強い味方___AWS_Kiroを使った二刀流スキル作成.pdf
duelist2020jp
1
140
エージェント化するAI:現在地とその先に起きる変化 / AI as Agents: The Current State and the Changes Ahead
ks91
PRO
0
160
All About Sansan – for New Global Engineers
sansan33
PRO
1
1.5k
AWSとGitHub Actionsの責任境界と 組織で安全に使用する取り組み
nealle
1
220
Featured
See All Featured
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
670
[RailsConf 2023] Rails as a piece of cake
palkan
59
6.9k
Docker and Python
trallard
47
4.2k
The World Runs on Bad Software
bkeepers
PRO
72
12k
So, you think you're a good person
axbom
PRO
2
2.1k
Kristin Tynski - Automating Marketing Tasks With AI
techseoconnect
PRO
0
480
HTML-Aware ERB: The Path to Reactive Rendering @ RubyCon 2026, Rimini, Italy
marcoroth
4
500
Mozcon NYC 2025: Stop Losing SEO Traffic
samtorres
1
510
A designer walks into a library…
pauljervisheath
211
24k
SERP Conf. Vienna - Web Accessibility: Optimizing for Inclusivity and SEO
sarafernandez
2
1.6k
Google's AI Overviews - The New Search
badams
0
1.6k
<Decoding/> the Language of Devs - We Love SEO 2024
nikkihalliwell
1
300
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 を理解していればほとんどわかったようなもの