use*_*543 3 reducers higher-order-functions redux
我创建了一些工厂功能,为我提供简单(或更高级)的减速器.例如(简单的一个 - 基于动作类型将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;
}
};
Run Code Online (Sandbox Code Playgroud)
使用这些工厂的功能和combineReducers从redux我可以撰写他们入处理大部分的我不经意的动作功能齐全的减速.这给了我可读的代码,并防止我犯了愚蠢的错误.
工厂适用于常见操作,但是当我需要添加一些自定义行为(对于操作类型)时应该显着修改商店的某些部分,我想编写一个自定义部分的reducer,它将为我处理该操作.我们的想法是以迭代方式组合reducer,combineReducers但是对于一个数组.这样我就可以使用我的工厂创建reducer,然后将它与我的自定义reducer结合起来,处理一些特定的操作.然后combineReducers,数组将调用第一个数组,识别没有任何更改,并调用第二个(自定义)数组来处理操作.
我一直在寻找一些解决方案并且发现它redux-actions但不太喜欢它将动作和减速器联系起来的方式,这使得语义与我以前的方法略有不同.也许我没有得到它,但最终我喜欢看到我的减速机被写成纯函数.
我正在寻找一些能给我指路的提示.是否有任何图书馆或项目使用任何类型的高阶减速器并以某种方式组合它们?如上所述,组成减速器是否有任何缺点?
是的,因为reducer 只是函数,所以你可以通过无数种方式组织逻辑,并且非常鼓励将多个函数组合在一起.
您正在寻找的"数组中的减速器"理念是https://github.com/acdlite/reduce-reducers.我经常在我自己的应用程序中使用它来实现这种行为 - 先运行一个combineReducers生成的reducer,然后依次运行reducers来获取更具体的行为.
我为Redux文档编写了一个名为Structuring Reducers的部分,其中介绍了与reducer逻辑相关的一些主题.这包括超出常规combineReducers方法的有用模式.
我还有许多其他与reducer相关的实用程序的列表,作为我的Redux插件目录的一部分.
| 归档时间: |
|
| 查看次数: |
2576 次 |
| 最近记录: |