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实现。
在我看来,从我所读到的内容来看,第一个实现是正确的方法。
操作是将数据从应用程序发送到存储的信息有效负载。它们是商店的唯一信息来源
来源: http://redux.js.org/docs/basics/Actions.html
从哲学的角度来看,由于动作是用于存储的信息的有效载荷,因此轻松区分不同的有效载荷非常重要。从使用的角度来看,它可以是一个嵌套的数据集,您可以随时解析它以再次检查操作。
这方面的示例用例来自 UNDO,当您执行删除操作并且想要撤消该操作时,如果操作多种多样,这将有很大帮助。因为它有助于确定要撤消的操作。考虑同时发生的多个 API 调用,现在您必须跟踪它是什么操作以及它是哪个 API 调用,因此最好将操作分开,这样就不会出现从嵌套数据结构检查类型的复杂性。