Upgrade to Pro — share decks privately, control downloads, hide ads and more …

propsのバケツリレー対策でGlobal_Stateを使うその前に

taro
January 18, 2023

 propsのバケツリレー対策でGlobal_Stateを使うその前に

こちらのイベントで使用した登壇資料です!
https://thecoo.connpass.com/event/269188/

taro

January 18, 2023
Tweet

More Decks by taro

Other Decks in Technology

Transcript

  1. 自己紹介 • taro( @taroro_tarotaro) • シェルフィー株式会社で建設SaaSを作ってます!(2020.11〜) • React, TypeScript, Server

    Side Kotlin ※Reactしか触ったことがないため、Reactをベースとした話になります🙏
  2. はじめに 昨今よく言われるReactのstateの分類 1. Server Data Cache 2. Global State: 1を除くページをまたいで保持し続ける必要のあるstate

    3. Local State: ページをまたいで保持する必要のないstate https://zenn.dev/yoshiko/articles/607ec0c9b0408d
  3. はじめに 昨今よく言われるReactのstateの分類 1. Server Data Cache ◦ TanStack Query, swr,

    etc. 2. Global State: 1を除くページをまたいで保持し続ける必要のあるstate ◦ useContext, Recoil, Jotai, Redux, Zustand, etc. 3. Local State: ページをまたいで保持する必要のないstate ◦ useState, etc.
  4. はじめに 昨今よく言われるReactのstateの分類 1. Server Data Cache ◦ TanStack Query, swr,

    etc. 2. Global State: 1を除くページをまたいで保持し続ける必要のあるstate ◦ useContext, Recoil, Jotai, Redux, Zustand, etc. 3. Local State: ページをまたいで保持する必要のないstate ◦ useState, etc. 💡Local Stateを実装的都合でGlobal Stateの管理手法を使う時の話
  5. はじめに Local Stateを実装的都合でGlobal Stateの手段で管理する時の話 • どんなケースか • その場合のむずかしさ • ケース別にLocal

    Stateでうまくやる方法 ※変更頻度が多く複数人で触るようなComponentを前提としています🙇
  6. Global Stateで管理する時のむずかしさ • スコープが広がる ◦ まぁGlobalだからね(Atoms系だと違うかも) • データフローが見えづらくなる ◦ 子Componentのpropから消えるため

    • ライフタイムが伸びる ◦ これの考慮が結構忘れがち ◦ クリーンアップ忘れて変更前のstateがチラっと見えちゃう🫣
  7. Global Stateで管理する時のむずかしさ • スコープが広がる ◦ まぁGlobalだからね(Atoms系だと違うかも) • データフローが見えづらくなる ◦ 子Componentのpropから消えるため

    • ライフタイムが伸びる ◦ これの考慮が結構忘れがち ◦ クリーンアップ忘れて変更前のstateがチラっと見えちゃう🫣 →影響範囲の把握コストが増える
  8. Global Stateで管理する時のむずかしさ • スコープが広がる ◦ まぁGlobalだからね(Atoms系だと違うかも) • データフローが見えづらくなる ◦ 子Componentのpropから消えるため

    • ライフタイムが伸びる ◦ これの考慮が結構忘れがち ◦ クリーンアップ忘れて変更前のstateがチラっと見えちゃう🫣 →影響範囲の把握コストが増える →僕はLocal Stateでがんばる派でその方法を紹介していく
  9. Local Stateでうまくやる方法 ③そもそもそんなにComponentをネストさせる必要があるのか? ※変更頻度が多く複数人で触るようなComponentが前提 • ロジックやstateはCustom Hookで責任ごとに分ける • 機能に依存しない小さな汎用Componentを作る •

    機能のComponentはそれらを組み合わせ機能内でのネストは最小限にする ◦ Viewの全体像がわかりやすい ◦ 不要なインターフェースが生まれず、柔軟性が保たれる