React,Reduxでアプリを作っているのですが、stateのlistが上手く更新できません
先日の質問を参考にして、入れ子のリストを使ったreducerを実装しています。
なにがしたいのか
上述のページで質問したことも踏まえて、
「入れ子リストのstateをreduxを用いて実装し、そこにリストを追加する」です。
実装したいものの概要
まず、2次元配列のような入れ子のリストのstateを用意します。
questionList:[ ['title1','message1'], ['title2','message2'], ['title3','message3'], ['title4','message4'], ['title5','message5'], ]
ユーザーがボタンを押したタイミングでここに新たな[title6,message6]を追加したいのです。
questionList:[ ['title1','message1'], ['title2','message2'], ['title3','message3'], ['title4','message4'], ['title5','message5'], ['title6','message6'], ]
しかし、ここでただ単に追加するだけなのであれば、以下のコードで実現します。
しかし、ここでは
ボタン押す→サーバーに追加→サーバーから全データを取得→描画
としたいので、以下のコードでは問題が起こります。
問題が生じているコード
javascript
1import * as actionTypes from "../actionTypes" 2 3/* 4* InitialState 5===================================*/ 6const initialStateQuestionList = { 7 title: null, 8 message: null, 9} 10 11/* 12* questionListReducer 13===================================*/ 14export const questionListReducer = (state = initialStateQuestionList, action) => { 15 switch (action.type) { 16 /*= QuestionPage =========*/ 17 case actionTypes.SET_QUESTION_TITLE: 18 if (state.id !== action.id) { 19 return state 20 } 21 return Object.assign({}, state, { 22 title: action.title, 23 message: action.message, 24 }) 25 26 default: 27 return state 28 } 29} 30 31/* 32* questionListsReducer 33===================================*/ 34const initialState = { 35 questionList: [], 36} 37 38/* 39* questionListsReducer 40===================================*/ 41export const questionListsReducer = (state = initialState, action) => { 42 switch (action.type) { 43 44 case actionTypes.SET_QUESTION_TITLE: 45 return Object.assign({}, state, { 46 questionList: state.questionList.map(t => 47 questionListReducer(t, action) 48 ) 49 }) 50 51 default: 52 return state 53 } 54} 55 56export default questionListsReducer
どんな問題が起こるか
今初期値としてサーバー内に5つのデータ、仮にそのtitleがa,b,c,d,eという文字列だとすると、
初期値は以下のようになっているとします。
[ ['a','message1'], ['b','message2'], ['c','message3'], ['d','message4'], ['e','message5'], ]
ここで、ボタンを押し、サーバーに1つ新しいデータfを送り、全データを取得すると、
[ ['a','message1'], ['b','message2'], ['c','message3'], ['d','message4'], ['e','message5'], ['a','message1'], ['b','message2'], ['c','message3'], ['d','message4'], ['e','message5'], ['f','message5'], ]
という風に追加されてしまいます。
これを、
[ ['a','message1'], ['b','message2'], ['c','message3'], ['d','message4'], ['e','message5'], ['f','message5'], ]
という風に更新したいです。
よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。