是否在商店中引发了不良行为?

时间:2015-01-28 21:50:37

标签: reactjs reactjs-flux

存储应该处理由操作触发的事件,并将更改发送到侦听视图控制器。

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

例如:

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),这样您就可以进入请求的不同阶段。 / p>

欢迎任何有关此事的更新。

1 个答案:

答案 0 :(得分:3)

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

当Dispatcher的当前版本做出反应时,我甚至不认为可以在调度时发送新动作,就像在商店中调用新动作一样。

在谈到flux pattern时,我恰好是一个小男孩的侦察员,但我一直在推动反应项目到生产,我们决定给它一个完整的去拿关于流量的行为,商店和事件的使用极端。

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