在Redux中构造高阶约简

在Redux中构造高阶约简,redux,higher-order-functions,reducers,Redux,Higher Order Functions,Reducers,我创建了一些工厂函数,它们为我提供了简单(或更高级)的减速机。例如(简单的一个-基于动作类型集RequestState常量作为值): 使用那些工厂函数和redux中的combinereducer,我可以将它们组合成功能齐全的reducer,处理我的大部分临时操作。这给了我可读的代码,防止我犯愚蠢的错误 工厂适用于普通操作,但当我需要添加一些自定义行为(对于操作类型)时,这些行为会显著修改存储区的某些部分,我希望编写一个reducer的自定义部分来为我处理该操作。 其思想是以迭代的方式组合减缩器,

我创建了一些工厂函数,它们为我提供了简单(或更高级)的减速机。例如(简单的一个-基于动作类型集
RequestState
常量作为值):

使用那些工厂函数和
redux
中的
combinereducer
,我可以将它们组合成功能齐全的reducer,处理我的大部分临时操作。这给了我可读的代码,防止我犯愚蠢的错误

工厂适用于普通操作,但当我需要添加一些自定义行为(对于操作类型)时,这些行为会显著修改存储区的某些部分,我希望编写一个reducer的自定义部分来为我处理该操作。 其思想是以迭代的方式组合减缩器,因此组合减缩器,但对于数组。通过这种方式,我可以使用我的工厂创建减速机,然后将其与处理某些特定操作的自定义减速机相结合。然后,数组的
combinereducer
将调用第一个,识别没有任何更改,并调用第二个(自定义)来处理该操作

我在寻找一些解决方案,发现了
redux actions
,但不太喜欢它链接操作和减缩器的方式,这使得语义与我习惯的略有不同。也许我不明白,但最终我喜欢看到我的减速机被写成纯函数

我在寻找一些能给我指路的提示。 是否有任何库或项目使用任何类型的高阶约简并以某种方式组合它们? 像上面描述的那样组合减缩器有什么缺点吗?

是的,因为减缩器只是函数,有无数种方法可以组织逻辑,并且非常鼓励将多个函数组合在一起

您正在寻找的“阵列中的还原器”概念是。我经常在自己的应用程序中使用它来实现这种行为——首先运行一个
组合减速器
——生成减速器,然后依次运行减速器来实现更具体的行为

我已经为Redux文档编写了一个名为的部分,它涵盖了许多与reducer逻辑相关的主题。除了通常的
组合转换器
方法之外,它还包括有用的模式

我还有一个列表作为我的。

(从2020-02-11起的工作链接)
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;
        }
    };