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

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

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

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

React.js

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

Q&A

解決済

1回答

1384閲覧

Reduxのチュートリアルを終えて、勉強しているのですが、値を受け渡す方法が分かりません。

退会済みユーザー

退会済みユーザー

総合スコア0

Redux

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

React.js

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

1グッド

2クリップ

投稿2020/04/16 15:50

編集2020/04/16 16:33

実現したいこと

現在のcountやtext、onClick()関数を受け渡す方法が理解できませんでした。

題材に選んだのは、ボタンを押すと1加算されるカウンターです。

action

1export const INCREMENT = 'INCREMENT'; 2 3export function increment(count) { 4 return { type: INCREMENT, count } 5} 6

reducers

1import { combineReducers } from 'redux' 2import { INCREMENT } from './actions'; 3 4const COUNT = { 5 count: 0 6} 7 8function counts(state = COUNT, action) { 9 switch (action.type) { 10 case INCREMENT: 11 return state + 1; 12 default: 13 return state; 14 } 15} 16 17const counter = combineReducers({ 18 counts 19}); 20 21export default counter; 22

CounterContainer

1import { connect } from 'react-redux'; 2import { increment } from '../actions'; 3import Counter from '../components/Counter'; 4 5const mapStateToProps = (state) => { 6 return state; 7} 8 9const mapDispatchToProps = (dispatch) => { 10 return { 11 onClick: () => { dispatch(increment()) } 12 } 13} 14 15const CounterContainer = connect(mapStateToProps, mapDispatchToProps)(Counter); 16 17export default CounterContainer; 18

Counter

1import React from 'react'; 2 3const Counter = ({ count, onClick, text }) => ( 4 <> 5 <p>{count}</p> 6 <button 7 onClick={onClick} 8 > 9 {text} 10 </button> 11 </> 12); 13 14export default Counter; 15

追記

ContainerのmapStateToPropsを以下のようにしたら値が渡りました。

const mapStateToProps = (state) => { return { count: state.counts.count, text: 'ADD!' } }

しかし依然としてmapDispatchToProps が上手く行きません

退会済みユーザー👍を押しています

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

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

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

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

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

guest

回答1

0

ベストアンサー

こんにちは

reducers の case INCREMENT: で、新しいstateを返す行を以下のように修正してみるといかがでしょうか?

修正前:

javascript

1case INCREMENT: 2 return state + 1;

修正後:

javascript

1case INCREMENT: 2 return { count: state.count + 1 };

投稿2020/04/16 19:16

jun68ykt

総合スコア9058

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

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

退会済みユーザー

退会済みユーザー

2020/04/17 00:52

できました!オブジェクトを返すのですね。 昨日から勉強を始めたので、理解がまだできていないようです。それぞれの役割と何を返すのかについて教えてください action:何をするのかが書いてあり、アクションクリエイターを使用する reducer:actionの種類によって処理を行う。オブジェクトをstoreに渡す store:UIの更新を行う? で合っていますか?
jun68ykt

2020/04/17 11:20 編集

> できました! とのことでよかったです???? > それぞれの役割と何を返すのかについて教えてください > action:何をするのかが書いてあり、アクションクリエイターを使用する 「何をするのかが書いてあり、」までは、ほぼ正しくて、「アクションクリエイターを使用する」は「アクションクリエイターによって作られる」がより正確です。 次に > reducer:actionの種類によって処理を行う。オブジェクトをstoreに渡す についてですが、 > actionの種類によって は、"種類によって" ではなく、 "タイプ(type)によって" と理解しておいたほうがより正確です。 「処理を行う。」と、「オブジェクトをstoreに渡す」では、reducerが何をやってくれるのかの説明として、十分ではありません。では正確(=必要十分)な説明はどうなるか、については最後に書いたようにQiitaに記事を上げたので参考にしてください。 三つ目の > store:UIの更新を行う? については間違いです。(それもかなり大きな) なぜかというと、redux はそれ単体ではUIと結びついているものではないからです。これをはっきり理解するためには、redux を使うけれども、react を使わない(つまりreact-reduxも使わない)ようなプログラムを書いてみるとよいです。(可能ならばコマンドラインで動かすものなら尚良し) では、store とは何か?ということですが、 action reducer store の3つまとめて、その定義を私も確認する目的で、以下の記事にしました。 【公式私家訳】Reduxの基本概念:Actions(アクション), Reducers(リデューサ), Store(ストア)とは何か? https://qiita.com/jun68ykt/items/ffee7688a2b0c6ed6c19 特に、概念を整理するうえで、store の説明の中にUI という言葉は出てこないことに注意を払うとよいでしょう。
退会済みユーザー

退会済みユーザー

2020/04/17 13:06

ありがとうございます!!さっそく読んでみます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問