SlideShare a Scribd company logo
1 of 21
Reactでのデータ共有
Props vs Context
@yzmw1213
・yzmw1213 です。
(ネット上での名前をまだ持ってないので、Gitのnameで名乗らさせて頂きます)
・エンジニア6年目で、React書いたり、GoでWeb API書いたりしてる人。
・学習中の技術: DBのインデックス構造 Btree, 二分探索とか
自己紹介
個人的に、React.Contextについて理解が不足しており、
使えていない(Contextを使うべき場面なのかどうかの判断ができていない)ので
理解を深めるために調べました
目次
1. reactコンポーネント間でデータを共有する方法いくつか
2. Props,Contextの比較
コンポーネント間でデータを共有するには?
Propを多用する?
方法は、いくつかある
● Redux
● イベントバス
● URLパラメータにデータを設定する
● セッションストレージ
● Props
Redux
● アプリケーション全体での状態管理を目的に設計されている。
● アプリケーションの状態が時間経過とともに頻繁に更新される場合に使われるべき。
状態変化を可視化したい場合
イベントバス
● コンポーネントからのイベント発火を起こすことができる。
● 多用しすぎると、イベント名の管理などでコードが混乱しやすくなるため、注意しましょう
eventBus.emit(‘MY_EVENT’, { foo: ‘xxx’}) eventBus.on(‘MY_EVENT’, handleEvent)
URLパラメータに設定する
● URLパラメータにデータを設定することで、データを共有する
● データ共有するためには画面遷移が必要なため、
入力データなどリアルタイムにデータを更新したい場合には不向き。
セッションストレージ
● ブラウザにデータを保持する
● 同一セッションの画面やタブ間でデータを共有できる
● セキュリティ上のリスクがある。(パスワード等の機密情報など、保持すべきでない)
● Reactコンポーネントは、同じページ内に存在する場合がほとんどであり、
セッションストレージを使う必要性は高くない
Props
● 親コンポーネントが、自身の内包するコンポーネントに属性としてデータを渡す方法。
● どのような型のデータでも渡せる。関数を渡すことも可能
● ただし、渡されたpropsは変更することができない事に注意。
子から値を変更したい場合は、Propsにset関数を追加する必要がある。
data,
setData()
Propsの問題点
・コンポーネントの階層が深くなると
Propsの受け渡しが冗長になり、
不便になる。
・下層にあるボタンや、ラベルを
制御するために色情報が
Propsで渡される事が
多くなっている
Context
Provider: contextの読み書きができる範囲
Context
value
Context
● コンテキストは、コンポーネントがその下のツリー全体に何らかの情報を提供することを可
能にする。
● コンテキストを使うコンポーネントは、Providerの範囲内にいる必要がある。
● Providerを配置するコンポーネントと、contextを利用するコンポーネントの間には、
どれだけ階層が合っても利用可能。
● <div>のような組み込みコンポーネントと、自作コンポーネントによらず利用可能
UIでContextが使われている箇所
● Redux
● react-query
コンポーネントがネストしても
clientやストアが使えるようにするため、内部でReact.Contextが使われている
PropsとContextの比較
Props
🙆 データの流れが一方向(親→子)で、明確である
🙆 型安全であり、コンポーネントを再利用しやすい
🙅 コンポーネントツリーが深くネストする場合、多層にデータを渡す必要がある
Context
🙆 多層にデータを渡さなくて良い
🙅 コンポーネントにContextを利用すると、再利用しにくくなる場合がある
Contextの利用場面
・Themeの共有 検討してみてもいいかもしれない。
・言語切り替え: (多言語対応する場合)
・ログイン情報の保持
Props vs Context
・単に、子の表示する情報を親が制御したい場合はPropsで良い
・コンポーネントの再利用性を高めたい場合にPropsは有用
・頻繁に変更されることの少ない、グローバルな情報を持つにはContextを検討してみたい
Tips.
Why React Context is Not a "State Management" Tool (and Why It Doesn't Replace Redux)
資料作っている間に、ReduxとContextの違いが疑問になったので、調べたら出てきた。
ReduxのContributorであるMark Erikson 氏が述べている。

More Related Content

Similar to React ContextとPropの違いについて

React componentのコンストラクタを追いかけて
React componentのコンストラクタを追いかけてReact componentのコンストラクタを追いかけて
React componentのコンストラクタを追いかけてHoso michi
 
SYSTEMI勉強会まとめ資料(React基礎まとめ)
SYSTEMI勉強会まとめ資料(React基礎まとめ)SYSTEMI勉強会まとめ資料(React基礎まとめ)
SYSTEMI勉強会まとめ資料(React基礎まとめ)YoshikiWatanabe1
 
ドメインオブジェクトの見つけ方・作り方・育て方
ドメインオブジェクトの見つけ方・作り方・育て方ドメインオブジェクトの見つけ方・作り方・育て方
ドメインオブジェクトの見つけ方・作り方・育て方増田 亨
 
Couch Db勉強会0623 by yssk22
Couch Db勉強会0623 by yssk22Couch Db勉強会0623 by yssk22
Couch Db勉強会0623 by yssk22Yohei Sasaki
 
スマートフォンWebアプリ最適化”3つの極意”
スマートフォンWebアプリ最適化”3つの極意”スマートフォンWebアプリ最適化”3つの極意”
スマートフォンWebアプリ最適化”3つの極意”Koji Ishimoto
 
第8回 福岡西区勉強会
第8回 福岡西区勉強会第8回 福岡西区勉強会
第8回 福岡西区勉強会Shinya Kinoshita
 
Creating and Using Links between Data Objects
Creating and Using Links between Data ObjectsCreating and Using Links between Data Objects
Creating and Using Links between Data ObjectsMitsuo Yamamoto
 
データベースアプリケーション開発セミナー・最新のデータベースとアプリケーション開発の関係
データベースアプリケーション開発セミナー・最新のデータベースとアプリケーション開発の関係データベースアプリケーション開発セミナー・最新のデータベースとアプリケーション開発の関係
データベースアプリケーション開発セミナー・最新のデータベースとアプリケーション開発の関係Kaz Aiso
 
MongoDBを用いたソーシャルアプリのログ解析 〜解析基盤構築からフロントUIまで、MongoDBを最大限に活用する〜
MongoDBを用いたソーシャルアプリのログ解析 〜解析基盤構築からフロントUIまで、MongoDBを最大限に活用する〜MongoDBを用いたソーシャルアプリのログ解析 〜解析基盤構築からフロントUIまで、MongoDBを最大限に活用する〜
MongoDBを用いたソーシャルアプリのログ解析 〜解析基盤構築からフロントUIまで、MongoDBを最大限に活用する〜Takahiro Inoue
 
Rancherを活用して開発効率を上げる
Rancherを活用して開発効率を上げるRancherを活用して開発効率を上げる
Rancherを活用して開発効率を上げるMichitaka Terada
 
Rails×React×TS で作るwebアプリ入門【weseek tech conf #10】
Rails×React×TS で作るwebアプリ入門【weseek tech conf #10】Rails×React×TS で作るwebアプリ入門【weseek tech conf #10】
Rails×React×TS で作るwebアプリ入門【weseek tech conf #10】WESEEKWESEEK
 
Storybook web-and-circleci
Storybook web-and-circleciStorybook web-and-circleci
Storybook web-and-circleciJesse Katsumata
 
HTML5でオフラインWebアプリケーションを作ろう
HTML5でオフラインWebアプリケーションを作ろうHTML5でオフラインWebアプリケーションを作ろう
HTML5でオフラインWebアプリケーションを作ろうyoshikawa_t
 
Ansibleではじめるサーバー・ネットワークの自動化(2019/04版)
Ansibleではじめるサーバー・ネットワークの自動化(2019/04版)Ansibleではじめるサーバー・ネットワークの自動化(2019/04版)
Ansibleではじめるサーバー・ネットワークの自動化(2019/04版)akira6592
 
現場で役立つシステム設計の原則
現場で役立つシステム設計の原則現場で役立つシステム設計の原則
現場で役立つシステム設計の原則増田 亨
 
ビッグデータ&データマネジメント展
ビッグデータ&データマネジメント展ビッグデータ&データマネジメント展
ビッグデータ&データマネジメント展Recruit Technologies
 
1_各Atlassian製品の紹介
1_各Atlassian製品の紹介1_各Atlassian製品の紹介
1_各Atlassian製品の紹介Ricksoft
 
20180723 PFNの研究基盤 / PFN research system infrastructure
20180723 PFNの研究基盤 / PFN research system infrastructure20180723 PFNの研究基盤 / PFN research system infrastructure
20180723 PFNの研究基盤 / PFN research system infrastructurePreferred Networks
 

Similar to React ContextとPropの違いについて (20)

Hadoopカンファレンス2013
Hadoopカンファレンス2013Hadoopカンファレンス2013
Hadoopカンファレンス2013
 
React componentのコンストラクタを追いかけて
React componentのコンストラクタを追いかけてReact componentのコンストラクタを追いかけて
React componentのコンストラクタを追いかけて
 
SYSTEMI勉強会まとめ資料(React基礎まとめ)
SYSTEMI勉強会まとめ資料(React基礎まとめ)SYSTEMI勉強会まとめ資料(React基礎まとめ)
SYSTEMI勉強会まとめ資料(React基礎まとめ)
 
ドメインオブジェクトの見つけ方・作り方・育て方
ドメインオブジェクトの見つけ方・作り方・育て方ドメインオブジェクトの見つけ方・作り方・育て方
ドメインオブジェクトの見つけ方・作り方・育て方
 
Couch Db勉強会0623 by yssk22
Couch Db勉強会0623 by yssk22Couch Db勉強会0623 by yssk22
Couch Db勉強会0623 by yssk22
 
スマートフォンWebアプリ最適化”3つの極意”
スマートフォンWebアプリ最適化”3つの極意”スマートフォンWebアプリ最適化”3つの極意”
スマートフォンWebアプリ最適化”3つの極意”
 
第8回 福岡西区勉強会
第8回 福岡西区勉強会第8回 福岡西区勉強会
第8回 福岡西区勉強会
 
Creating and Using Links between Data Objects
Creating and Using Links between Data ObjectsCreating and Using Links between Data Objects
Creating and Using Links between Data Objects
 
データベースアプリケーション開発セミナー・最新のデータベースとアプリケーション開発の関係
データベースアプリケーション開発セミナー・最新のデータベースとアプリケーション開発の関係データベースアプリケーション開発セミナー・最新のデータベースとアプリケーション開発の関係
データベースアプリケーション開発セミナー・最新のデータベースとアプリケーション開発の関係
 
MongoDBを用いたソーシャルアプリのログ解析 〜解析基盤構築からフロントUIまで、MongoDBを最大限に活用する〜
MongoDBを用いたソーシャルアプリのログ解析 〜解析基盤構築からフロントUIまで、MongoDBを最大限に活用する〜MongoDBを用いたソーシャルアプリのログ解析 〜解析基盤構築からフロントUIまで、MongoDBを最大限に活用する〜
MongoDBを用いたソーシャルアプリのログ解析 〜解析基盤構築からフロントUIまで、MongoDBを最大限に活用する〜
 
Rancherを活用して開発効率を上げる
Rancherを活用して開発効率を上げるRancherを活用して開発効率を上げる
Rancherを活用して開発効率を上げる
 
Rails×React×TS で作るwebアプリ入門【weseek tech conf #10】
Rails×React×TS で作るwebアプリ入門【weseek tech conf #10】Rails×React×TS で作るwebアプリ入門【weseek tech conf #10】
Rails×React×TS で作るwebアプリ入門【weseek tech conf #10】
 
Storybook web-and-circleci
Storybook web-and-circleciStorybook web-and-circleci
Storybook web-and-circleci
 
HTML5でオフラインWebアプリケーションを作ろう
HTML5でオフラインWebアプリケーションを作ろうHTML5でオフラインWebアプリケーションを作ろう
HTML5でオフラインWebアプリケーションを作ろう
 
Ansibleではじめるサーバー・ネットワークの自動化(2019/04版)
Ansibleではじめるサーバー・ネットワークの自動化(2019/04版)Ansibleではじめるサーバー・ネットワークの自動化(2019/04版)
Ansibleではじめるサーバー・ネットワークの自動化(2019/04版)
 
現場で役立つシステム設計の原則
現場で役立つシステム設計の原則現場で役立つシステム設計の原則
現場で役立つシステム設計の原則
 
ビッグデータ&データマネジメント展
ビッグデータ&データマネジメント展ビッグデータ&データマネジメント展
ビッグデータ&データマネジメント展
 
Datomic&datalog紹介
Datomic&datalog紹介Datomic&datalog紹介
Datomic&datalog紹介
 
1_各Atlassian製品の紹介
1_各Atlassian製品の紹介1_各Atlassian製品の紹介
1_各Atlassian製品の紹介
 
20180723 PFNの研究基盤 / PFN research system infrastructure
20180723 PFNの研究基盤 / PFN research system infrastructure20180723 PFNの研究基盤 / PFN research system infrastructure
20180723 PFNの研究基盤 / PFN research system infrastructure
 

React ContextとPropの違いについて