带参数vs多个动作的Redux动作

时间:2017-08-22 04:34:01

标签: redux reswift

推荐的API请求周期操作方式是什么?

即:我通常有3个步骤

  • 请求已启动(等待响应)
  • 请求成功完成(并返回一个值)
  • 请求失败(或返回错误)

我可以将这些步骤建模为3个动作

  • RequestDidStartAction
  • RequestDidFinishWithSuccessAction(此处我将此值作为操作的属性)
  • RequestDidFinishWithFailureAction(此处我将此错误视为操作的属性)

或者我可以将其建模为具有枚举的一个动作:

struct RequestAction: Action {

    let state: AsyncRequestState<Value, Error>

}

enum AsyncRequestState<S, F> {

    case waiting
    case success(S)
    case failure(F)

}

这两种方式中的哪一种更好?或者还有更好的选择吗?

Ps。:我使用的是ReSwift,但我认为这个问题适用于任何Redux实现。

1 个答案:

答案 0 :(得分:0)

在我看来,从我所读到的,第一个实现是正确的方法。

操作是将数据从应用程序发送到商店的信息的有效负载。它们是商店的唯一信息来源

来源:http://redux.js.org/docs/basics/Actions.html

从哲学的角度来看,由于动作需要作为存储的信息有效载荷,因此轻松区分不同的有效载荷非常重要。从使用的角度来看,它可以是嵌套数据集,您可以在需要再次检查操作时随时解析该数据集。

此示例用例来自UNDO,当您执行删除操作时,如果ACTIONS不同,您想撤消该操作将会很有帮助。因为它有助于确定要逆转的行动。考虑同时发生多个API调用,现在您必须跟踪它是什么动作以及它是哪个API调用,因此最好将操作分开,以便从嵌套数据结构中检查类型的复杂性没有出现。