将业务逻辑放到传奇中可以吗

时间:2019-08-26 11:51:14

标签: reactjs redux redux-saga

我正在开发一个小型的react / redux / saga应用程序。它基本上是一个多步表单,带有 LoadBalancer: Type: AWS::ElasticLoadBalancingV2::LoadBalancer Properties: IpAddressType: ipv4 Name: network-loadbalancer Scheme: internet-facing SubnetMappings: - AllocationId: !Ref LoadBalancerElasticIP SubnetId: !Ref Subnet1a Back按钮,以及一个进度栏。每个表单步骤(或表单屏幕)都有许多字段。

根据规范,该表格应能够逐步将用户输入的数据存储在服务器上-即,每次单击Next按钮时。对于当前表单步骤,此按钮的作用类似于典型的Next按钮,但是如果所有请求都成功,它也应该使用户走得更远。如果服务器在当前步骤中至少对一个字段返回了错误,则用户不应有可能继续进行下一个错误。

要注意的是,对服务器的请求不是预先确定的-某些实体可能会被修改,某些-添加和某些-删除。这完全取决于用户的选择。 因此,从技术上讲,在允许用户进行下一步之前,我必须确保仅将需要的请求发送到服务器,并且当然,服务器必须以成功状态响应这些请求。

我正在使用redux-saga来管理副作用,我只是看不到如何从组件本身内部发出单独的请求(例如addUserEducation,deleteUserEducation等),而仍然符合规范。感觉像是这种特殊情况迫使我将我的“业务”逻辑的重要部分放到了一个传奇中,该传奇从表单屏幕中获取所有数据并使用它来决定应将什么发送到服务器。由于我对每个请求都使用了阻塞调用,因此,我希望可以依靠传奇末尾的错误选择器来有条件地(或不将用户)带到下一步。

这种方法行得通,但是我不确定它是否与redux-saga的最佳做法相吻合,因为我的许多sagas变得“太胖”,而不仅仅是严格地做副作用。我认为这可能不是最佳选择,应该有更优雅的替代方案来解决此问题。请帮忙!

submit
// Education.js (one of the form screens)

const sendForms = (nextStep, history) => {
    handleEducation(
      { userId, educationList, forms, formList },
      nextStep,
      history,
    );
  };

0 个答案:

没有答案