让商店在另一家商店听取变化

时间:2015-06-18 11:24:55

标签: reactjs flux

我有一个包含2个商店的Flux应用:ACCOUNT-STORECLIENT-STORE

目前,该应用程序允许用户过滤特定国家/地区,并且已在每个商店中实施整个过滤器逻辑(因为帐户数据和客户端数据都必须按国家/地区进行过滤)。所以两个商店: 1-听取组件触发的SELECT_COUNTRY操作 2-创建一个仅保留所选国家/地区的过滤功能 3-将该功能应用于他们的数据

由于过滤器的数量会增加,我想知道是否可以将第1步和第2步移到第三个只管理过滤器的商店:FILTER-STORE

现在FILTER-STORE听取SELECT_COUNTRY并创建过滤器功能,但我无法找到让ACCOUNT-STORECLIENT-STORE倾听并对{{1}中的变化做出反应的最佳做法1}}。

FILTER-STORE的AppDispatcher.register中,我尝试在创建过滤器函数后调用另一个操作:

FILTER-STORE

我的计划是让switch (action.actionType) { case AppConstants.SELECT_ACCOUNT: updateAccountFilter(action.data); AppActions.stfil_selectAccount( FilterStore.getAccountFilter() ); break; ACCOUNT-STORE听取此操作并使用其有效负载。但我依赖错误信息:

CLIENT-STORE

所以也许有另一种方式?是否可以让Invariant Violation: Dispatch.dispatch(...): Cannot dispatch in the middle of a dispatch.ACCOUNT-STORE听取CLIENT-STORE,就像我的组件听商店一样?

由于

1 个答案:

答案 0 :(得分:3)

here解释说,你要做的事情是针对Flux单向数据流架构。商店不应该为自己发出变化来监听,应该只听取组件的动作并发出对组件的更改。

如果要干掉过滤器逻辑,则应创建一个相应的FilterActionCreator,它将处理调度SELECT_ACCOUNT和其他操作。您可以在这篇广泛的answer中了解更多相关信息。

这将使您的逻辑DRY和流量安全。