我创建了一些工厂函数,为我提供了简单(或更高级)的减速器。例如(简单一 - 基于动作类型集RequestState
常数作为值):
export const reduceRequestState = (requestTypes: RequestActionTypes) =>
(state: RequestState = RequestState.None, action: Action): RequestState => {
switch (action.type) {
case requestTypes.start:
return RequestState.Waiting;
case requestTypes.success:
return RequestState.Success;
case requestTypes.error:
return RequestState.Error;
case requestTypes.reset:
return RequestState.None;
default:
return state;
}
};
使用这些工厂函数和combineReducers
from redux
我可以将它们组合成功能齐全的减速器来处理我的大部分休闲动作。这给了我可读的代码并防止我犯愚蠢的错误。
工厂对于常见操作很有用,但是当我需要添加一些自定义行为(对于操作类型)时,这应该显着修改存储的某些部分,我想编写一个减速器的自定义部分来为我处理该操作。
这个想法是以迭代的方式组合减速器,所以combineReducers
但对于一个数组。这样我就可以使用我的工厂创建减速器,然后将其与处理某些特定操作的自定义减速器结合起来。这combineReducers
对于数组,然后调用第一个数组,认识到没有任何更改并调用第二个(自定义)数组来处理该操作。
我正在寻找一些解决方案并发现redux-actions
但不太喜欢它链接操作和化简器的方式,这使得语义与我习惯的没有什么不同。也许我不明白,但最终我喜欢看到我的减速器被编写为纯函数。
我正在寻找一些可以为我指明方向的提示。
是否有任何库或项目使用任何类型的高阶减速器并以某种方式组合它们?
像上面描述的那样组成减速器有什么缺点吗?
是的,因为减速器是just函数,组织逻辑的方式有无数种,将多个函数组合在一起就是非常受鼓舞.
您正在寻找的“数组中的减速器”想法是https://github.com/acdlite/reduce-reducers https://github.com/acdlite/reduce-reducers。我经常在我自己的应用程序中使用它来实现这种行为 - 运行combineReducers
- 首先生成减速器,然后依次运行减速器以获得更具体的行为。
我为 Redux 文档编写了一个名为结构化减速器 http://redux.js.org/docs/recipes/StructuringReducers.html,其中涵盖了许多与减速器逻辑相关的主题。这包括超出平常的有用模式combineReducers
方法。
我还有一份清单许多其他与减速器相关的实用程序 https://github.com/markerikson/redux-ecosystem-links/blob/master/reducers.md作为我的一部分Redux 插件目录 https://github.com/markerikson/redux-ecosystem-links.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)