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 Native で状態管理とコンポーネント設計に悩んだ話
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
zerosant
June 03, 2022
Technology
2k
2
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
React Native で状態管理とコンポーネント設計に悩んだ話
zerosant
June 03, 2022
Other Decks in Technology
See All in Technology
日本 Fintech 未来予測レポート 2027〜2028年(手動編集版)
8maki
1
2.5k
AI駆動開発を通して感じた、 AI時代のデザイナーの役割変化
whisaiyo
4
2.3k
AI時代のコスト管理を考えよう〜明日から使える実践AWSノウハウ~
yoshimi0227
0
280
FPGAの開発コンペでZephyrを使ってみた
iotengineer22
0
130
AIネイティブな開発のサプライチェーンリスク対策 〜激動の開発現場でリスクに立ち向かう〜【ZennFes】
cscengineer
PRO
2
140
アンオフィシャルな、オフィシャルからのお願い
wyamazak_devrel
0
140
LayerXにおけるセキュリティ管理の現在地と次の一手
tosho
0
240
サイバーエージェントにおけるAI推進戦略と変革への取り組み
shotatsuge
0
110
攻撃者視点で考えるDetection Engineering
cryptopeg
3
2k
Oracle AI Database@AWS:サービス概要のご紹介
oracle4engineer
PRO
4
3k
iAEONの段階的リアーキテクト戦略 / iAEON's_Gradual_Re-architecture_Strategy
aeonpeople
0
230
200個のGitHubリポジトリを横断調査したかった
icck
0
140
Featured
See All Featured
Designing Experiences People Love
moore
143
24k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
3.5k
Conquering PDFs: document understanding beyond plain text
inesmontani
PRO
4
2.8k
Building a Scalable Design System with Sketch
lauravandoore
463
34k
A designer walks into a library…
pauljervisheath
211
24k
AI Search: Where Are We & What Can We Do About It?
aleyda
0
7.6k
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
340
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
28
3.5k
WENDY [Excerpt]
tessaabrams
11
38k
Why You Should Never Use an ORM
jnunemaker
PRO
61
9.9k
Ecommerce SEO: The Keys for Success Now & Beyond - #SERPConf2024
aleyda
1
2k
The Curse of the Amulet
leimatthew05
1
13k
Transcript
React Native でコンポーネント設計と 状態管理に悩んだ話 at TECH STAND #8 React Native
& React 2022.06.03 スターフェスティバル株式会社 ソフトウェアエンジニア 吉藤 徹
自己紹介 吉藤 徹 Yoshifuji Toru スターフェスティバル株式会社 ソフトウェアエンジニア @zerosant 普段は TypeScript
でサーバーサイド・フロントエンドを書いています。 Node.js や React がメイン。最近はサーバーサイド寄りが若干多め。
今日話すこと • サービス紹介 • 状態管理に悩んだ話 • コンポーネント設計に悩んだ話
サービス紹介 • 日本最大級の企業・ワーカー向け フードデリバリーサービス • 10,000種類以上のラインナップ • 会議・接待・イベントシーンにマッチし たごちそうをお届け
サービス紹介 • 毎日選べる日替わりメニューをオフィ スにお届け • 健康的な食事で福利厚生を充実 • Web・アプリ・Slackから注文
サーバーサイド API Batch フロントエンド ワーカー向け画面 各種管理画面 エンジニア2名 Slack Bot App
ごちクルNowの開発体制
技術選定 Why React Native ? • 普段からReactでフロントエンドを開発している。 • Flutterも検討したが、学習コストと天秤にかけてスピードを重視。
状態管理に悩んだ話
状態管理に悩んだ話 Web版での状態管理は... • Reduxを採用している。 • APIレスポンスや通信状態などを含め、Reduxに全部任せる。 • 単純なUIの制御状態は Local State
で管理する。
状態管理に悩んだ話 でも、Reduxはしんどい • コード量が多く、少しの改修でも変更量がかさむ。 • Redux不要論も囁かれ始める世の中。
「状態」ってなに...?
状態を分類した 1. セッションデータ ◦ 認証情報やそれに関連するユーザー情報・ユーザー設定。 ◦ 多くのページで使用されることを想定している。 2. ドメインデータ ◦
「商品」や「注文」といった、サービスが取り扱う固有なデータ。 ◦ サーバーからAPI経由で取得する。 ◦ 未取得・取得成功/失敗といった通信に関する状態も同時に持つ。 3. UIの制御状態 ◦ フォームの入力状態や開閉状態など。 ◦ ユーザーの操作によって変更され、 UIの表示に影響する。
状態の分類 → 状態管理の手法 1. セッションデータ → React Context ◦ 認証情報やそれに関連するユーザー情報・ユーザー設定。
◦ 多くのページで使用されることを想定している。 2. ドメインデータ → Local State or Redux ◦ 「商品」や「注文」といった、サービスが取り扱う固有なデータ。 ◦ サーバーからAPI経由で取得する。 ◦ 未取得・取得成功/失敗といった通信に関する状態も同時に持つ。 3. UIの制御状態 → Local State or React Context ◦ フォームの入力状態や開閉状態など。 ◦ ユーザーの操作によって変更され、 UIの表示に影響する。
状態管理の手法 : React Context いつ React Context を使うのか → ページを跨いで保持したいもので、更新頻度が低いものに使う
コンテクストは、ある React コンポーネントのツリーに対して「グローバル」とみなすことができる、現在の認証済 みユーザ・テーマ・優先言語といったデータを共有するために設計されています。 React 公式 - コンテクスト
状態管理の手法 : React Context React Context で管理するもの • セッションデータ ◦
すべてのページ/画面にまたがって使用する。 ◦ 更新頻度は低い • UIの制御状態 ◦ グローバルな制御状態のみ。 ◦ ModalとかSnackbarとか。
状態管理の手法 : Local State Local State で管理するもの • ドメインデータ ◦
特定のページ/画面のみで使用する、ページ固有のものに限る。 • UIの制御状態 ◦ フォームの入力状態など。 ◦ コンポーネントのライフサイクルに依存するもの。
状態管理の手法 : Redux Redux (などの状態管理ライブラリ) で管理するもの • ドメインデータ ◦ ページ/画面をまたがって保持する必要のあるもの。
◦ 該当するものはなさそう。 ◦ → 該当するものが出現したら導入する。
徐々に侵される Context
反省 • Modal や Snackbar など、グローバルなUIコン ポーネントにドメインデータを表示したくなる。 • 時が来たらReduxを入れるという決意、無謀(甚 大な作業量)
• 特定の処理だけを行うためだけの Contextが増 えていく。 • グッバイ秩序 ※ イメージ
Facebook もやってる FACEBOOK ALSO DOES SO.
コンポーネント設計に悩んだ話
状態管理に悩んだ話 Web版でのコンポーネント設計は... • 細かいルールは存在しなかった。 • ワーカー向け画面や複数の管理画面で使い回すUI部品は共通化している。 • Reduxを採用し、Container Component を作っていた。
• Redux の Action Creator で API を呼び出していた。 • あとは src/components にどんどん追加していく。
Reduxから解き放たれた私たち ※ イメージ
状態管理に悩んだ話 秩序を取り戻そう • API呼び出しは特定のレイヤで行う。 • Screen単位でContainer Componentを作って、そこでのみAPIを呼び出す。 • Atomic Design
でいう Pages と Templates に近い。 • あとは src/components にどんどん追加していく(雑)
目指すコンポーネント設計 ※ イメージ
肥大化する Container Component
反省 • Container コンポーネントが肥大化。 • Presentational コンポーネントの凝集度がと ても低い。 • どうにかして分割したいけど、
API call のレイ ヤを統一しつつ分割するとなると ... • 尽きぬ悩み ※ イメージ
まとめ • 状態管理に悩んだ話 ◦ 状態を三分類した。 ◦ 状態の特性ごとに適した状態管理手法を検討した。 • コンポーネント設計に悩んだ話 ◦
ページ/画面単位でビューとロジックを分離した。 ◦ ほんとはもっと細かい悩みはたくさんあるけど紹介しきれない ...!
We are hiring!!! スターフェスティバルでは、エンジニアを大募集しています!!!!! 採用情報 スターフェスティバル 採用情報 CTOによる対談記事 「イチから作り出せるチャンスがたくさんある」 CTO経験者が語った、スタフェス開発への期待|スター
フェスティバル公式|note
ご清聴ありがとうございました