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

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

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

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

React.js

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

Q&A

解決済

1回答

2425閲覧

[Redux] 配列にデータを追加できません!console.logはどこへ書くのが最適ですか?

uk_63

総合スコア29

Redux

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

React.js

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

0グッド

0クリップ

投稿2019/01/07 08:16

#はじめに
質問を見てくださってありがとう御座います。

Reactの初心者です。
Reduxを使ってみようと練習しています。

#困っていること

<input />に入力した文字が、上手く配列に追加できていません。

そして現在は、下記コードでdispatch毎にstateの中身を監視しています。

js

1store.subscribe(() => console.log(store.getState()));

consoleでみると配列の中身はカラです。
イメージ説明

#実際のコード

考えられる問題箇所にコメントしています。
また、Redux導入の練習中なのでファイルは一箇所にまとめています。

js

1import React from "react"; 2import { render } from "react-dom"; 3import ReactDOM from "react-dom"; 4import { createStore, applyMiddleWare } from "redux"; 5 6import "./styles.css"; 7 8// 初期値の設定 9const initialState = { 10 task: "", 11 tasks: [] 12}; 13 14// Reducer 15function tasksReducer(state = initialState, action) { 16 switch (action.type) { 17 case "INPUT_TASK": 18 return { 19 ...state, 20 task: action.payload.task 21 }; 22 23 // 下記のaction.payload.taskに値が入っていない?? 24 // コンソールで中身を見たいがどこに書けば良いのかわからない。 25 case "ADD_TASK": 26 return { 27 ...state, 28 tasks: state.tasks.concat([action.payload.task]) 29 }; 30 default: 31 return state; 32 } 33} 34 35// store 36const store = createStore(tasksReducer); 37 38// dispatchの度にstateの中身を監視できる 39store.subscribe(() => console.log(store.getState())); 40 41// Action Creator 42const inputTask = task => ({ 43 type: "INPUT_TASK", 44 payload: { 45 task 46 } 47}); 48const addTask = task => ({ 49 type: "ADD_TASK", 50 payload: { 51 task 52 } 53}); 54 55// コンポーネント 56function TodoApp({ store }) { 57 const { task, tasks } = store.getState(); 58 return ( 59 <> 60 <div> 61 <input 62 type="text" 63 onChange={e => store.dispatch(inputTask(e.target.value))} 64 /> 65 <input 66 type="button" 67 value="add" 68 onClick={() => store.dispatch(addTask(task))} 69 /> 70 </div> 71 <ul> 72 {tasks.map(function(item, i) { 73 return <li key={i}>{item}</li>; 74 })} 75 </ul> 76 </> 77 ); 78} 79 80function renderApp(store) { 81 render(<TodoApp store={store} />, document.getElementById("root")); 82} 83 84store.subscribe(() => renderApp(sore)); 85renderApp(store); 86

#質問

####Q1.なぜ配列にデータが入らないのか教えて頂きたいです。

####Q2.Ruduxのデバックの際、どこへconsole.logを書くのが最適でしょうか?

#最後に
最後まで読んでくださりありがとうございます。
ご回答宜しくお願いします。

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

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

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

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

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

jun68ykt

2019/01/07 19:12

こんにちは。wilfさんが回答に書いておられますが、sore を storeに修正すると意図通りに動きました。参考までに次のURL https://git.io/fhGPN に画面キャプチャを上げておきます。これは「テスト」と入力してから add をクリック、その後、「テスト」を消してから「あいうえお」と入力してからaddをクリックしたときの画面です。
guest

回答1

0

ベストアンサー

Q1.なぜ配列にデータが入らないのか教えて頂きたいです。
添付されているソースの
store.subscribe(() => renderApp(sore));

sore を storeにすると動いているように思います。

Q2.Ruduxのデバックの際、どこへconsole.logを書くのが最適でしょうか?

  • actionの送信値 => reducer の switch の手前
  • ボタンが押されているか => view onClick内
  • 更新後のstore => reducer の return 部分を変数に詰め直してログを出す

などいくつかあります。

また redux のデバッグを助けるものがいくつかあるので、
そちらを利用しながら開発を進めると良いかなと思います。

redux-logger https://qiita.com/tataric12/items/3bdf2f3132948e3d75e3
Redux DevTools https://chrome.google.com/webstore/detail/redux-devtools/lmhkpmbekcpmknklioeibfkpmmfibljd

投稿2019/01/07 09:03

wilf

総合スコア300

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

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

uk_63

2019/01/07 23:37

回答ありがとうございます! タイプミスが今後ないよう気をつけます。 デバックのツールを使ってみたいと思います。教えてくださりありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問