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

Posted

技术标签:

【中文标题】在商店中触发操作是不好的做法吗?【英文标题】:Is triggering an action in the store bad practice? 【发布时间】:2015-03-27 23:48:41 【问题描述】:

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

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

例如:

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 架构中“正确”吗?

谢谢!

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

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

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

我对事物的理解如下:

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

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

无论如何,正如 Ben Alpert 的回答所说,您可以为一个用户操作创建多个操作(例如:REQUEST_START、REQUEST_SUCCESS、REQUEST_ERROR),这样您就可以连接到请求的不同阶段。

欢迎对此进行任何更新。

【问题讨论】:

How do you manage asynchronous Store operations with Flux? 的可能重复项 在动作创建器中执行异步操作,完成后在那里创建另一个动作。商店不应创建操作。 如果这是您想要的方式,我会放弃获取数据的操作调用,而只是在商店中进行实际获取。不幸的是,这不符合 Flux 精神,当从视图触发时,您应该在操作中进行获取。 见比尔费舍尔的回答***.com/questions/26632415/… 【参考方案1】:

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

在当前版本的 Dispatcher 中,我什至认为在调度时调度新动作是不可能的,就像在商店中调用新动作时那样。

当谈到 flux pattern 时,我确实有点像童子军,但我一直在将 react 项目推向生产,我们决定给它一个全部去使用它动作、存储和事件在通量方面达到极致。

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

【讨论】:

所以答案是“是”?如“是的,这是一种不好的做法”? 感谢@AmirEldor。更新了答案。搞笑。

以上是关于在商店中触发操作是不好的做法吗?的主要内容,如果未能解决你的问题,请参考以下文章

我可以使用函数触发器来安排函数吗? [复制]

在 Python 中在操作代码中间定义一个函数是不好的做法吗? [关闭]

一种使用 createAsyncThunk 触发多个异步操作的简洁方法

`window.matchMedia` 会触发回流吗?

JavaScript:动态扩展原型是一种不好的做法吗?

让我的 Junit 测试与真实数据库交互是不好的做法吗?