実現したいこと
React-Reduxのreducerで以下の要素の一部だけを更新しようとしています。
const initialState = { "TaskLogs" : [ { "CreatedDate" : "2020/81", "TaskGroupName": "SAMPLE_TITLE", "Tasks": [ { "Task": "FirstTask", "Date": { "8/1": "11", "8/2": "", "8/3": "", "8/4": "", "8/5": "", "8/6": "", "8/7": "", "8/8": "", "8/9": "", "8/10": "", "8/11": "", "8/12": "", "8/14": "" } }, { "Task": "SecondTask", "Date": { "8/1": "2", "8/2": "", "8/3": "", "8/4": "", //例えば、ここの値だけを変更させたい "8/5": "", "8/6": "", "8/7": "", "8/8": "", "8/9": "", "8/10": "", "8/11": "", "8/12": "", "8/14": "" } }, { "Task": "ThirdTask", "Date": { "8/1": "300", "8/2": "", "8/3": "", "8/4": "", "8/5": "", "8/6": "", "8/7": "", "8/8": "", "8/9": "", "8/10": "", "8/11": "", "8/12": "", "8/14": "" } } ] }, ] } const reducer = (state = initialState, action) =>{ switch(action.type) { case ADD_TASKLOG:{ return { ...state, TaskLogs :[...state.TaskLogs, action.TaskLog] } } case UPDATE_TASKLOG:{ //TaskLogs[i].Tasks[j].Date[k] //更新先 let i = action.data[0] //TaskLogs(配列)を指定する数値 let j = action.data[1] //Tasks(配列)を指定する数値 let k = action.data[2] //Date(オブジェクト)を指定するプロパティ名(例:k = "8/6") let value = action.data[3] //更新させたい値 (例:value="あああ", Date{"8/6": "あああ"}) return { ...state, TaskLogs: ??????←どんな処理を書けばよいのかわからない。 } } case UPDATE_TASKGROUPNAME:{ //省略 } case DELETE_TASKLOG:{ // 省略 } default:{ return state } } }
試したこと
更新先めがけて、ネストされたオブジェクトを以下のように一段一段と降りるように設定しました。
しかし、無事更新されるもののTaskLogsが配列からオブジェクトに変換されてしまったので結果的にダメでした。
case UPDATE_TASKLOG:{ //TaskLogs[i].Tasks[j].Date[k] //更新先 let i = action.data[0] //TaskLogs(配列)を指定する数値 let j = action.data[1] //Tasks(配列)を指定する数値 let k = action.data[2] //Date(オブジェクト)を指定するプロパティ名(例:k = "8/6") let value = action.data[3] //更新させたい値 (例:value="あああ", Date{"8/6": "あああ"}) return { ...state, TaskLogs:{ //試したところ ...state.TaskLogs, [i]:{ ...state.TaskLogs[i], Tasks:{ ...state.TaskLogs[i].Tasks, [j]: { ...state.TaskLogs[i].Tasks[j], Date:{ ...state.TaskLogs[i].Tasks[j].Date, [k]:[value] } } } } } } }
ほかにも以下のようなサイトで試してみましたが、どれも私ほどのひどいネスト構造ではなく、シンプルなもののため参考になりませんでした。
応用できない実力不足を恨みたいところですが、それは回答者様に期待しようと思います。よろしくお願いいたします。
https://www.py4u.net/discuss/283462
https://qiita.com/kuropp/items/f295c45e1705677a7a48
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/09/01 03:44
退会済みユーザー
2021/09/01 03:48