在商店中触发操作是不好的做法吗?

IT技术 reactjs reactjs-flux
2021-05-07 19:11:07

Stores 应该处理由动作触发的事件并将更改发送到监听视图控制器。

他们是否也可以触发操作,例如在请求的回调中或直接在商店的注册回调中。

例如:

AppDispatcher.register(function(payload) {

  switch(payload.action.actionType) {

    case Constants.PAGE_CHANGED:
      ActionCreator.fetchNewData();
      break;

    case Constants.FETCH_DATA:
      // save data
      Store.emitChange();
      break;
  }    
});

在 Flux 架构中这样的代码“正确”吗?

谢谢 !

====== 根据评论更新:

这不是“我需要这样做。我该怎么做?”的问题,而是“这应该是一种做事方式吗”。我想答案是......它是你的选择。

在评论中添加了一些有用的链接,谢谢。

我对事情的理解如下:

在 Flux 架构中,视图应该是唯一触发操作的视图。将异步请求放在您的动作创建者中,回调应该启动一个新动作。

当不遵循 Flux 步骤时,商店也可以处理异步请求,但要确保回调不直接处理数据,而是触发另一个动作。请参阅 Bill Fisher 对此的回答。

在任何情况下,正如 Ben Alpert 的回答所说,您可以为用户操作创建多个操作(例如:REQUEST_START、REQUEST_SUCCESS、REQUEST_ERROR),这允许您挂钩请求的不同阶段。

欢迎对此进行任何更新。

1个回答

简短的回答:是的 - 在商店中触发操作是一种不好的做法。

并且在当前版本的 Dispatcher 中,我什至不认为可以在分派时分派新动作,就像在商店中调用新动作时那样。

我正确有点的童子军的,当涉及到的流量模式,但我一直在力推react项目,以生产,我们决定给它一个完整的走,走使用的动作,存储和事件到极致关于通量。

我认为你永远不应该让商店调用新的动作,因为当项目开始发展时,这可能会导致非常奇怪的行为。没错,它并没有真正“打破”数据流思维,因为您仍然(应该)像往常一样处理响应,然后一切正常。但是如果你真的需要这个,我宁愿fetchNewData()直接在第一个动作中调用什么