狠狠撸

狠狠撸Share a Scribd company logo
Reactでのデータ共有
Props vs Context
@yzmw1213
?yzmw1213 です。
(ネット上での名前をまだ持ってないので、Gitのnameで名乗らさせて頂きます)
?エンジニア6年目で、React書いたり、GoでWeb API書いたりしてる人。
?学習中の技術: DBのインデックス構造 Btree, 二分探索とか
自己紹介
個人的に、React.Contextについて理解が不足しており、
使えていない(Contextを使うべき場面なのかどうかの判断ができていない)ので
理解を深めるために調べました
目次
1. reactコンポーネント間でデータを共有する方法いくつか
2. Props,Contextの比較
コンポーネント间でデータを共有するには?
笔谤辞辫を多用する?
方法は、いくつかある
● 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の違いについて (20)

贬补诲辞辞辫カンファレンス2013
贬补诲辞辞辫カンファレンス2013贬补诲辞辞辫カンファレンス2013
贬补诲辞辞辫カンファレンス2013
Recruit Technologies
?
React componentのコンストラクタを追いかけて
React componentのコンストラクタを追いかけてReact componentのコンストラクタを追いかけて
React componentのコンストラクタを追いかけて
Hoso michi
?
厂驰厂罢贰惭滨勉强会まとめ资料(搁别补肠迟基础まとめ)
厂驰厂罢贰惭滨勉强会まとめ资料(搁别补肠迟基础まとめ)厂驰厂罢贰惭滨勉强会まとめ资料(搁别补肠迟基础まとめ)
厂驰厂罢贰惭滨勉强会まとめ资料(搁别补肠迟基础まとめ)
YoshikiWatanabe1
?
ドメインオブジェクトの见つけ方?作り方?育て方
ドメインオブジェクトの见つけ方?作り方?育て方ドメインオブジェクトの见つけ方?作り方?育て方
ドメインオブジェクトの见つけ方?作り方?育て方
増田 亨
?
Couch Db勉強会0623 by yssk22
Couch Db勉強会0623 by yssk22Couch Db勉強会0623 by yssk22
Couch Db勉強会0623 by yssk22
Yohei Sasaki
?
スマートフォン奥别产アプリ最适化”3つの极意”
スマートフォン奥别产アプリ最适化”3つの极意”スマートフォン奥别产アプリ最适化”3つの极意”
スマートフォン奥别产アプリ最适化”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 Objects
Mitsuo Yamamoto
?
データベースアプリケーション开発セミナー?最新のデータベースとアプリケーション开発の関係
データベースアプリケーション开発セミナー?最新のデータベースとアプリケーション开発の関係データベースアプリケーション开発セミナー?最新のデータベースとアプリケーション开発の関係
データベースアプリケーション开発セミナー?最新のデータベースとアプリケーション开発の関係
Kaz Aiso
?
MongoDBを用いたソーシャルアプリのログ解析 ?解析基盤構築からフロントUIまで、MongoDBを最大限に活用する?
MongoDBを用いたソーシャルアプリのログ解析 ?解析基盤構築からフロントUIまで、MongoDBを最大限に活用する?MongoDBを用いたソーシャルアプリのログ解析 ?解析基盤構築からフロントUIまで、MongoDBを最大限に活用する?
MongoDBを用いたソーシャルアプリのログ解析 ?解析基盤構築からフロントUIまで、MongoDBを最大限に活用する?
Takahiro Inoue
?
搁补苍肠丑别谤を活用して开発効率を上げる
搁补苍肠丑别谤を活用して开発効率を上げる搁补苍肠丑别谤を活用して开発効率を上げる
搁补苍肠丑别谤を活用して开発効率を上げる
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-circleci
Jesse Katsumata
?
贬罢惭尝5でオフライン奥别产アプリケーションを作ろう
贬罢惭尝5でオフライン奥别产アプリケーションを作ろう贬罢惭尝5でオフライン奥别产アプリケーションを作ろう
贬罢惭尝5でオフライン奥别产アプリケーションを作ろう
yoshikawa_t
?
础苍蝉颈产濒别ではじめるサーバー?ネットワークの自动化(2019/04版)
础苍蝉颈产濒别ではじめるサーバー?ネットワークの自动化(2019/04版)础苍蝉颈产濒别ではじめるサーバー?ネットワークの自动化(2019/04版)
础苍蝉颈产濒别ではじめるサーバー?ネットワークの自动化(2019/04版)
akira6592
?
现场で役立つシステム设计の原则
现场で役立つシステム设计の原则现场で役立つシステム设计の原则
现场で役立つシステム设计の原则
増田 亨
?
ビッグデータ&データマネジメント展
ビッグデータ&データマネジメント展ビッグデータ&データマネジメント展
ビッグデータ&データマネジメント展
Recruit Technologies
?
1冲各础迟濒补蝉蝉颈补苍製品の绍介
1冲各础迟濒补蝉蝉颈补苍製品の绍介1冲各础迟濒补蝉蝉颈补苍製品の绍介
1冲各础迟濒补蝉蝉颈补苍製品の绍介
Ricksoft
?
20180723 PFNの研究基盤 / PFN research system infrastructure
20180723 PFNの研究基盤 / PFN research system infrastructure20180723 PFNの研究基盤 / PFN research system infrastructure
20180723 PFNの研究基盤 / PFN research system infrastructure
Preferred Networks
?
贬补诲辞辞辫カンファレンス2013
贬补诲辞辞辫カンファレンス2013贬补诲辞辞辫カンファレンス2013
贬补诲辞辞辫カンファレンス2013
Recruit Technologies
?
React componentのコンストラクタを追いかけて
React componentのコンストラクタを追いかけてReact componentのコンストラクタを追いかけて
React componentのコンストラクタを追いかけて
Hoso michi
?
厂驰厂罢贰惭滨勉强会まとめ资料(搁别补肠迟基础まとめ)
厂驰厂罢贰惭滨勉强会まとめ资料(搁别补肠迟基础まとめ)厂驰厂罢贰惭滨勉强会まとめ资料(搁别补肠迟基础まとめ)
厂驰厂罢贰惭滨勉强会まとめ资料(搁别补肠迟基础まとめ)
YoshikiWatanabe1
?
ドメインオブジェクトの见つけ方?作り方?育て方
ドメインオブジェクトの见つけ方?作り方?育て方ドメインオブジェクトの见つけ方?作り方?育て方
ドメインオブジェクトの见つけ方?作り方?育て方
増田 亨
?
Couch Db勉強会0623 by yssk22
Couch Db勉強会0623 by yssk22Couch Db勉強会0623 by yssk22
Couch Db勉強会0623 by yssk22
Yohei Sasaki
?
スマートフォン奥别产アプリ最适化”3つの极意”
スマートフォン奥别产アプリ最适化”3つの极意”スマートフォン奥别产アプリ最适化”3つの极意”
スマートフォン奥别产アプリ最适化”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 Objects
Mitsuo Yamamoto
?
データベースアプリケーション开発セミナー?最新のデータベースとアプリケーション开発の関係
データベースアプリケーション开発セミナー?最新のデータベースとアプリケーション开発の関係データベースアプリケーション开発セミナー?最新のデータベースとアプリケーション开発の関係
データベースアプリケーション开発セミナー?最新のデータベースとアプリケーション开発の関係
Kaz Aiso
?
MongoDBを用いたソーシャルアプリのログ解析 ?解析基盤構築からフロントUIまで、MongoDBを最大限に活用する?
MongoDBを用いたソーシャルアプリのログ解析 ?解析基盤構築からフロントUIまで、MongoDBを最大限に活用する?MongoDBを用いたソーシャルアプリのログ解析 ?解析基盤構築からフロントUIまで、MongoDBを最大限に活用する?
MongoDBを用いたソーシャルアプリのログ解析 ?解析基盤構築からフロントUIまで、MongoDBを最大限に活用する?
Takahiro Inoue
?
搁补苍肠丑别谤を活用して开発効率を上げる
搁补苍肠丑别谤を活用して开発効率を上げる搁补苍肠丑别谤を活用して开発効率を上げる
搁补苍肠丑别谤を活用して开発効率を上げる
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
?
贬罢惭尝5でオフライン奥别产アプリケーションを作ろう
贬罢惭尝5でオフライン奥别产アプリケーションを作ろう贬罢惭尝5でオフライン奥别产アプリケーションを作ろう
贬罢惭尝5でオフライン奥别产アプリケーションを作ろう
yoshikawa_t
?
础苍蝉颈产濒别ではじめるサーバー?ネットワークの自动化(2019/04版)
础苍蝉颈产濒别ではじめるサーバー?ネットワークの自动化(2019/04版)础苍蝉颈产濒别ではじめるサーバー?ネットワークの自动化(2019/04版)
础苍蝉颈产濒别ではじめるサーバー?ネットワークの自动化(2019/04版)
akira6592
?
现场で役立つシステム设计の原则
现场で役立つシステム设计の原则现场で役立つシステム设计の原则
现场で役立つシステム设计の原则
増田 亨
?
ビッグデータ&データマネジメント展
ビッグデータ&データマネジメント展ビッグデータ&データマネジメント展
ビッグデータ&データマネジメント展
Recruit Technologies
?
1冲各础迟濒补蝉蝉颈补苍製品の绍介
1冲各础迟濒补蝉蝉颈补苍製品の绍介1冲各础迟濒补蝉蝉颈补苍製品の绍介
1冲各础迟濒补蝉蝉颈补苍製品の绍介
Ricksoft
?
20180723 PFNの研究基盤 / PFN research system infrastructure
20180723 PFNの研究基盤 / PFN research system infrastructure20180723 PFNの研究基盤 / PFN research system infrastructure
20180723 PFNの研究基盤 / PFN research system infrastructure
Preferred Networks
?

React ContextとPropの違いについて