我无法弄清楚如何在嵌套数组中组合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;答案 0 :(得分:0)
reducer不是状态本身,它是接收动作的类型和有效负载并构建状态的一部分的函数。在这种情况下,我可能会在根目录而不是列表中创建routineReducer
和routineDayReducer
对象,并且该对象中的键将是例程的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存储所有内容。