如何在阵列中嵌套Redux Reducers?

时间:2018-05-20 17:44:46

标签: reactjs redux

我无法弄清楚如何在嵌套数组中组合reducers。我希望能够将多个例程添加到例程列表中,并且我希望能够在每个例程中添加多天。





我无法弄清楚我应该如何组合这些减速器,这样我就可以在例程列表中的例程中添加天数。





以下是一个示例状态:




  const sampleState = {
 “惯例”:[
 {
 “name”:“Starting Strengh”,
 “天”:[
 {
 “dayName”:“胸部”,
 “练习”:[
 {
 “exerciseName”:“Bench Press”,
 “套装”:5,
 “代表”:5
 }
 ]
 }
 ]
 }
 ]
}
  




我的routineReducer和routineDayRecuder如下所示:

&#xA;&#xA; < pre> function dayReducer(state = [],action){&#xA; switch(action.type){&#xA;案例ADD_ROUTINE_DAY:&#xA;返回[&#xA; ...状态,&#XA; {&#XA; name:action.name,&#xA; }&#XA; ]&#XA;默认:&#XA;返回状态&#xA; }&#xA;}&#xA;&#xA; function routineReducer(state = [],action){&#xA; switch(action.type){&#xA; case ADD_ROUTINE:&#xA;返回[&#xA; ...状态,&#XA; {&#XA; name:action.name,&#xA; days:dayReducer&#xA; }&#XA; ]&#XA;默认:&#XA;返回状态&#xA; }&#xA;}&#xA; &#xA;&#xA;

我正在组合我的减速机:

&#xA;&#xA;
  const fntnessApp = combineReducers({&#xA; routines:routineReducer,&#xA; routing&#xA;})&#xA;  
&#xA;&#xA;

请帮忙,谢谢!

&#xA;

1 个答案:

答案 0 :(得分:0)

reducer不是状态本身,它是接收动作的类型和有效负载并构建状态的一部分的函数。在这种情况下,我可能会在根目录而不是列表中创建routineReducerroutineDayReducer对象,并且该对象中的键将是例程的id。

dayReducer看起来像:

function dayReducer(state=[], action) {
  switch (action.type) {
    case ADD_ROUTINE_DAY:
      return {
        ...state,
        [action.routineId] : [
           ...state[action.routineId],
           {
              name: action.name
           }
        ]
      }
    default:
      return state
  }
}

然后当你mapStateToProps时,你可以通过将routineId传递给选择器来选择你想要的例程。那有意义吗?如果您希望能够编辑这些天,那么您将需要像在数据库中那样规范化您的表,并按照它自己的唯一ID存储所有内容。