Javascript 如何等待从一个商店到另一个商店的发货
我正在使用Facebook的Flux,react,ES6 我对那些单身商店有不同的问题。然而,反复出现的问题如下。我从一个组件发送一个操作,我有两个存储(StoreA,StoreB)监听该操作 我的两个存储在两个不同的文件中,在每个文件中,我导出singleton存储实例。这两个存储已经导入到它们的相关容器(React组件视图)中。我希望StoreA在StoreA中启动流程之前,等待StoreB完成当前分派的处理 我已经阅读了文档,有一个waitFor方法可以与register方法从dispatcher返回的令牌一起使用。但是,我的两个存储在不同的文件中。找不到从StoreA访问StoreB的调度令牌的方法 换言之: ReactComp.jsJavascript 如何等待从一个商店到另一个商店的发货,javascript,reactjs,ecmascript-6,flux,Javascript,Reactjs,Ecmascript 6,Flux,我正在使用Facebook的Flux,react,ES6 我对那些单身商店有不同的问题。然而,反复出现的问题如下。我从一个组件发送一个操作,我有两个存储(StoreA,StoreB)监听该操作 我的两个存储在两个不同的文件中,在每个文件中,我导出singleton存储实例。这两个存储已经导入到它们的相关容器(React组件视图)中。我希望StoreA在StoreA中启动流程之前,等待StoreB完成当前分派的处理 我已经阅读了文档,有一个waitFor方法可以与register方法从dispat
...
handleClick() {
dispatcher.dispatch({
type: 'ACTION1'
});
}
StoreA.js
class StoreA {
constructor() {
this.dispatchToken = dispatcher.register((action) => {
switch(action.type) {
case 'ACTION1':
// do something...
break;
}
});
}
}
export default new StoreA();
StoreB.js
class StoreB {
constructor() {
dispatcher.register((action) => {
switch(action.type) {
case 'ACTION1':
dispatcher.waitFor([storeADispatchToken]); //how to get the dispatchToken from Store A...
break;
}
});
}
}
export default new StoreB();
我不熟悉react和flux体系结构,如果答案是显而易见的,那么我会感到抱歉,但是,由于我花了很多时间寻找答案,我打赌答案是不成功的。将StoreA导入StoreB,您应该能够引用令牌:
import StoreA from 'path/to/StoreA.js';
// or if you're not using es6 imports:
// const StoreA = require('path/to/StoreA.js');
class StoreB {
constructor() {
dispatcher.register((action) => {
switch(action.type) {
case 'ACTION1':
dispatcher.waitFor([StoreA.dispatchToken]);
break;
}
});
}
}
export default new StoreB();
很抱歉,我没有提到这两个存储文件已经导入到各自的组件文件中。如果我这样做,如果我理解正确,我会复制StoreA,对吗?我可能会得到我在组件中使用的上一个实例和我在StoreB中导入的那个实例。两者都将侦听相同的操作,这可能会导致重复Ajax调用和其他逻辑。如果我正确理解您的担忧,答案是否定的-每个存储只有一个实例,因为您正在从存储文件导出一个实例,而不是类-
导出默认的新存储a()代码>-关键在于使用新的。当您从'path/to/StoreA'
导入StoreA时,StoreB和任何使用StoreA的组件都将获得相同的实例。是的,这是我关心的问题,但我有办法解决吗?在我看来,每个文件有一个存储区是合乎逻辑的。但是因为Flux是关于单例存储的,如果我的存储导入到不同的文件中,我就无法访问这些分派令牌。我发现我的自调度操作在有效负载中包含相对存储的dispatch令牌。不要认为这是处理通量模式的正确方法。如果我有一个文件stores.js,文件中的某处有:new StoreA()和new StoreB(),并导出默认值{StoreA:StoreA,StoreB:StoreB},该怎么办?谢谢你的帮助!安德里亚,我想你误解了我的回答-你不需要想办法解决它-听起来你好像误解了出口的工作原理。由于您正在导出实例,StoreB和组件都可以在创建StoreA时导入StoreA,并且都将获得相同的单个实例,因此,不必担心重复的操作侦听器或逻辑,因为该实例只创建了一次,并且是共享的。确实,就您直接从组件分派操作的方式而言,您当前的实现不是很“流畅”——通常的方法不是让组件直接分派,但是要通过action creators实现这一点,请看一看Facebook flux demo Github项目,看看他们是如何构建它的,以便只通过actions目录中的模块发送操作的-