質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Redux

Reduxは、JavaScriptアプリケーションの状態を管理するためのオープンソースライブラリです。ReactやAngularで一般的にユーザーインターフェイスの構築に利用されます。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

Q&A

2回答

3473閲覧

react + reduxでのコンポーネント間の値の受け渡し、算出

SmithTarou

総合スコア16

Redux

Reduxは、JavaScriptアプリケーションの状態を管理するためのオープンソースライブラリです。ReactやAngularで一般的にユーザーインターフェイスの構築に利用されます。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

0グッド

0クリップ

投稿2017/02/24 19:49

javascript

1//state 2{ 3state_A: x, 4state_B: [ 5{ 6Y:y, 7Z:z 8} 9: 10: 11] 12} 13 14//component 15<component_A>//state_Aにxの値を渡す 16<component_B>//state_Bにyの値を渡し、zの値を表示させる(z = x / y)

上記のxの値、yの値が入力されたらzの値を算出させたいのですが
コンポーネントが違う場合どのようにしたらよいのでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

全面的なreduxの実装まで至らなくても、component_Aとcomponent_Bをrenderする親コンポーネント(コンテナ?)で再計算して送ればいいです。

component_A内のxや、
component_B内のyが
変更されたことを、親コンポーネントがどう知るか、がreduxとは異なって来ます。
下記の例示ではxやyはテキスト入力と仮定します。

■redux使用の場合
①component_A内のx入力要素のonChangeイベント等でmodelの関数をコール。

②modelでは数字チェック等行ってactionを作成してdispatch。この時reducerを通じてグローバルなstateに値保存。

③再度renderがかかるため、親コンポーネントにて、グローバルなstateからxやyの値を取得。zの再計算も行う。(別に②の時点でz計算しといて保存しとくのもありです)
④component_Aとcomponent_Bにxyz受け渡す。

■redux使用無しの場合
①component_Aに対して、親コンポーネント上でのx変更関数をpropsとして受け渡し。

②component_A内のx入力要素のonChangeイベントで数字チェック等行って①で渡されている親の関数を呼ぶ。

③親コンポーネントのx入力関数(①の中身)では単純にthis.setStateでxを保持。この時zも計算していっしょにsetState。

④setStateによる再renderがかかるので、component_Aとcomponent_Bにxyz受け渡す。

どちらもcomponent_Aなどの子コンポーネントは自身の中にxやyを保持せず、上位から落ちてくる作りとなります。これを「ステートレスコンポーネント」と言います。詳しいことは調べてください。
ステートレスにすることによって、上位から指定した事しかしなくなる(子の中で独自に持つデータが無い)ため使い回しが効きます。これは慣れると新しいHTMLタグを自分で作っていくかのようにプロジェクト中の武器になっていきますので、子となるコンポーネントはなるべくステートレスに仕上げたいですね。

投稿2017/10/17 15:50

ashinaga_onisan

総合スコア12

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

上記のxの値、yの値が入力されたらzの値を算出させたいのですが

コンポーネントが違う場合どのようにしたらよいのでしょうか?

そういうときのための redux です。 react のコンポーネントで値が変更される毎にア
クションを dispatch します。 x が変更されたアクション、 yが変更された
アクションをうけて、 reducer で z の値を更新します。

投稿2017/02/25 09:01

mit0223

総合スコア3401

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問