gpt4 book ai didi

redux - 在 Redux 中编写高阶 reducer

转载 作者:行者123 更新时间:2023-12-01 10:44:33 25 4
gpt4 key购买 nike

我创建了一些工厂函数,这些函数为我提供了简单(或更高级)的 reducer 。例如(简单的一个 - 基于 Action 类型设置 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,以处理我的大部分临时操作。这给了我可读的代码并防止我犯愚蠢的错误。

工厂适用于常见操作,但是当我需要添加一些自定义行为(用于操作类型)时,它应该显着修改存储的某些部分,我想编写一个自定义的 reducer 部分来为我处理该操作.这个想法是以迭代的方式组合reducers,所以 combineReducers 但对于一个数组。这样我就可以使用我的工厂创建 reducer ,然后将它与处理一些特定操作的自定义 reducer 结合起来。然后,数组的 combineReducers 将调用第一个,识别出没有任何变化并调用第二个(自定义)来处理操作。

我一直在寻找一些解决方案,发现 redux-actions 但不太喜欢它链接 Action 和 reducer 的方式,这使得语义与我习惯的语义略有不同。也许我不明白,但最终我希望看到我的 reducer 被写成纯函数。

我正在寻找一些可以为我指明方向的提示。是否有任何库或项目使用任何类型的高阶 reducer 并以某种方式组合它们?像上面描述的那样组成 reducer 有什么缺点吗?

最佳答案

是的,由于 reducer 只是函数,因此您可以通过无数种方式组织逻辑,非常鼓励将多个函数组合在一起

您正在寻找的“数组中的reducers”想法是https://github.com/acdlite/reduce-reducers .我经常在我自己的应用程序中使用它来实现这种行为 - 首先运行 combineReducers 生成的 reducer ,然后依次运行 reducer 以获得更具体的行为。

我为 Redux 文档编写了一个名为 Structuring Reducers 的部分,其中涵盖了与 reducer 逻辑相关的许多主题。这包括常规 combineReducers 方法之外的有用模式。

我还有一个列表 many other reducer-related utilities作为我的 Redux addons catalog 的一部分.

关于redux - 在 Redux 中编写高阶 reducer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40749773/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com