我创建了一些工厂函数,它们为我提供了简单(或更高级)的reducer。例如(简单的 - 行动型的基础设置RequestState
常数的值):在Redux中编写高阶缩减器
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;
}
};
使用这些工厂函数和redux
combineReducers
我可以撰写他们入处理大部分的我不经意的动作功能齐全的减速。这给了我可读的代码,并防止我犯愚蠢的错误。
工厂对于常见操作很有帮助,但是当我需要添加一些自定义行为(对于操作类型),这应该会显着修改商店的某些部分,我想编写一个可以处理该操作的自定义部分我。 这个想法是以迭代的方式组成减速器,所以combineReducers
但是对于一个数组。这样我就可以使用我的工厂创建Reducer,然后将其与我的自定义Reducer结合起来处理一些特定的操作。数组的combineReducers
然后会调用第一个,认识到没有任何变化,并调用第二个(自定义)处理该动作。
我正在寻找一些解决方案,发现redux-actions
,但不太喜欢它链接动作和减速器的方式,使得语义与我以前所用的语义有点不同。也许我不明白,但最终我希望看到我的减速器被写成纯功能。
我找的一些提示,会告诉我的方式。 是否有任何图书馆或项目使用任何一种更高阶的减速器并以某种方式将它们组合在一起? 关于如上所述组成减速器有什么不利之处吗?