从不同的reducer访问reducer?

时间:2017-03-28 12:18:12

标签: javascript reactjs redux react-redux flux

我有一个学生列表,我的应用程序总是显示当时的一个学生,即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;
    }
}

我会以某种方式需要抓住另一个减速器并抓住下一个元素,但我不知道我会怎么做。

2 个答案:

答案 0 :(得分:1)

在我看来,活跃的学生和学生名单本身应该住在同一个减速器里面。因此,例如,只有一个瞳孔减速器,其状态是一个物体。然后按照目前的行动进行操作。

另外说过,减速器应该是纯粹的任何副作用,因此不是你想要做的地方。您可以做的是计算缩减器/动作之外的下一个学生,例如在某个组件中单击按钮,然后将其传递给update_active动作,然后将其传递到缩减器中以设置为活动学生。

答案 1 :(得分:0)

activePupilReducer的范围不够广泛。它应该能够看到activePupil密钥和pupils数组都可以工作。

如果您正在使用combineReducers,则可能无法让他们访问彼此的状态。您应该将这两个reducer合并为一个,并使用以下状态结构:

{
  pupils: [...]
  activePupil: {...}
}

当您调用UPDATE_ACTIVE操作时,此单个reducer可以访问这两个键并能够执行状态突变。