前提・実現したいこと
React+Reduxで、ファイルに関する情報を記録する簡単なアプリを書いています。
しかし、次のような配列とオブジェクト構造を持ったStateの一部を更新するreducerをどう書くのが良いのか分か、また、payloadとして何を渡すのが適切なのか悩んでいます。
教えていただけると有り難いです。宜しくお願い致します。
該当のソースコード
Reducer
jsx
1const initialState = [ 2 { 3 id: 1, 4 projectName: 'タナカのプロジェクト', 5 files: [ 6 { id: 1, 7 fileName: 'タナカのfileName1', 8 fileDesc: 'タナカのfileDesc1', 9 }, 10 { 11 id: 2, 12 fileName: 'タナカのfileName2', 13 fileDesc: 'タナカのfileDesc2', 14 }, 15 ], 16 }, 17 { 18 id: 2, 19 projectName: 'スズキのプロジェクト', 20 files: [ 21 { id: 1, 22 fileName: 'スズキのfileName1', 23 fileDesc: 'スズキのfileDesc1', 24 }, 25 { 26 id: 2, 27 fileName: 'スズキのfileName2', 28 fileDesc: 'スズキのfileDesc2',//例えばココの内容を変更したい 29 }, 30 ], 31 }, 32 33 34const updateFile = (state, payload) => { 35 //ここの書き方がわからないです。 36} 37 38//参考 ちなみにproject自体の更新に関しては以下のように記述しています。 39const updateProject = (state, payload) => { 40 return [ 41 ...state.filter( project => project.id !== payload.project.id), payload.project 42 ] 43} 44//参考以上 45 46export default createReducer(initialState, { 47 [UPDATE_FILE]: updateFile, 48})
ActionCreator
jsx
1 2export const updateFile = (?) => { 3 return { 4 type: UPDATE_FILE, 5 payload: { 6 //上に合わせてここをどう書けば良いでしょうか? 7 } 8 } 9} 10 11//参考 projectの更新 12export const updateFile = (project) => { 13 return { 14 type: UPDATE_PROJECT, 15 payload: { 16 project 17 } 18 } 19} 20//参考以上 21
Const
jsx
1export const UPDATE_FILE = 'UPDATE_FILE'; 2
ReducerUtil
jsx
1export const createReducer = (initialState, fnMap) => { 2 return (state = initialState, { type, payload }) => { 3 const handler = fnMap[type]; 4 return handler ? handler(state, payload) : state 5 } 6}
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/02/09 04:21 編集
2020/03/08 05:36 編集
2020/02/09 09:31