从不同的减速器访问减速器?

Posted

技术标签:

【中文标题】从不同的减速器访问减速器?【英文标题】:Access a reducer from a different reducer? 【发布时间】:2017-08-21 12:23:15 【问题描述】:

我有一个学生列表,我的应用程序始终显示一个学生,即 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;
    

不知何故,我需要抓住另一个减速器并抓住下一个元素,但我不知道该怎么做。

【问题讨论】:

【参考方案1】:

在我看来,活动瞳孔和瞳孔列表本质上应该存在于同一个减速器中。因此,例如,只有一个状态为对象的瞳孔缩小器。然后像现在一样采取行动。

话虽如此,reducer 是为了避免任何副作用,因此不是你想做的事情。你可以做的是在你的减速器/动作之外计算下一个学生,例如在某些组件中单击按钮,然后将其传递给你的 update_active 动作,然后将它传递给你的减速器以设置为活动瞳孔。

【讨论】:

所以如果我理解正确的话,我完全走错了路,试图在减速器中实现这个功能?这很有趣,因为我目前在我的行动中有它,但我认为我在那里实施了一个反模式。【参考方案2】:

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

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


  pupils: [...]
  activePupil: ...

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

【讨论】:

我正在使用联合减速器,所以,最后,我的商店看起来像你引用的那个。那么,如果我理解正确的话,我是否可以简单地在我的组合减速器中实现这个功能,因为我需要访问这两条数据? 你的 reducer 应该可以访问 both 条目。您需要将 both 放在 store 中的同一个键下,这样它们就可以被同一个 reducer 访问。所以,store = data: pupils, activePupil

以上是关于从不同的减速器访问减速器?的主要内容,如果未能解决你的问题,请参考以下文章

具有单个映射器和两个不同减速器的 hadoop 作业

Hive 分组中的减速器数量和计数(不同)

使用 combineReducers() 给出的运行时结果与单个 reducer 不同

汽车转弯时,两侧车轮转速不同?怎么解决问题

从另一个减速器中的一个减速器访问减速器状态的一部分

在国外用啥加速器 玩国内游戏加速器哪个好?