我有一个学生列表,我的应用程序总是显示当时的一个学生,即activePupil。到目前为止我有两台减速机。一个包含并默认返回所有子节点的列表(以数组的形式):
[
{
id: 1
name: Barack
},
{
id: 2
name: Donald
}
]
...然后我有一个activePupilReducer,其中包含正在查看的当前瞳孔。例如,
{
id: 2
name: Donald
}
现在我不知道如何迭代到下一个学生。当调度动作“UPDATE_ACTIVE”时,我希望我的activePupilReducer将活动学生更新为下一个学生。所以我需要抓住我学生的当前id,迭代它,然后从另一个reducer中获取具有正确id的学生(或者我认为我必须这样做)。现在我的activePupilReducer看起来像这样:
export default function (state={id: -1, name:"John"}, action) {
switch (action.type) {
case "UPDATE_ACTIVE":
// ??
default:
return state;
}
}
我会以某种方式需要抓住另一个减速器并抓住下一个元素,但我不知道我会怎么做。
答案 0 :(得分:1)
另外说过,减速器应该是纯粹的任何副作用,因此不是你想要做的地方。您可以做的是计算缩减器/动作之外的下一个学生,例如在某个组件中单击按钮,然后将其传递给update_active动作,然后将其传递到缩减器中以设置为活动学生。
答案 1 :(得分:0)
activePupilReducer
的范围不够广泛。它应该能够看到activePupil
密钥和pupils
数组都可以工作。
如果您正在使用combineReducers
,则可能无法让他们访问彼此的状态。您应该将这两个reducer合并为一个,并使用以下状态结构:
{
pupils: [...]
activePupil: {...}
}
当您调用UPDATE_ACTIVE
操作时,此单个reducer可以访问这两个键并能够执行状态突变。