【发布时间】:2017-04-06 14:17:30
【问题描述】:
我创建了一些工厂函数,这些函数为我提供了简单(或更高级)的减速器。例如(简单一——基于动作类型设置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;
}
};
使用这些工厂函数和来自redux 的combineReducers,我可以将它们组合成功能齐全的reducer 来处理我的大部分休闲动作。这给了我可读的代码并防止我犯愚蠢的错误。
工厂适用于常见操作,但是当我需要添加一些自定义行为(用于操作类型)时,它应该显着修改商店的某些部分.
这个想法是以迭代的方式组合reducers,所以combineReducers但是对于一个数组。通过这种方式,我可以使用我的工厂创建减速器,然后将其与处理某些特定操作的自定义减速器结合起来。然后数组的combineReducers 将调用第一个数组,识别出没有任何变化并调用第二个(自定义)数组来处理操作。
我正在寻找一些解决方案并找到了redux-actions,但不太喜欢它链接动作和减速器的方式,这使得语义与我习惯的语义略有不同。也许我不明白,但最终我希望看到我的 reducer 被写成纯函数。
我正在寻找一些可以为我指明方向的提示。 是否有任何库或项目使用任何类型的高阶减速器并以某种方式组合它们? 像上面描述的那样组成减速器有什么缺点吗?
【问题讨论】:
标签: redux higher-order-functions reducers